简述深浅拷贝原理
程序员文章站
2022-06-24 16:15:33
//for in 不可以获取不可枚举的属性 //hasOwnProperty 会忽略原型链上的属性 //Object.getOwnPropertyNames 可以获取可枚举和不可枚举的属性 //深拷贝 ......
//数组浅拷贝 var arr=["xjz","is","a","superman"]; //slice var new_arr=arr.slice(); new_arr[0]="zxb"; console.log("before:"+arr); console.log("after:"+new_arr); //concat var new_arr=arr.concat(); new_arr[0]="bb"; console.log("before:"+arr); console.log("after:"+new_arr);
//这个方法只能是拷贝基本类型 如果数组项是引用类型的话 只会拷贝引用
//所以当以后改变这个引用的时候 都会发生改变 很麻烦
//只是适用于存储基本类型的数组的拷贝
//深拷贝 //如果只是简单地数据类型 可以json解析 //function undefined null nan infinity 拷贝不了 var json=["xjz","super","man",{ "age":12, "name":"xjz" },function(){return "dadada"},undefined,null,nan,infinity]; var newjson=json.parse(json.stringify(json));
所以还需要自己写一个拷贝 啊哈哈哈哈哈
//for in 不可以获取不可枚举的属性
//hasownproperty 会忽略原型链上的属性
//object.getownpropertynames 可以获取可枚举和不可枚举的属性
//深拷贝
function deepcopy(obj){ if(!(obj && typeof obj==="object")){ return; } else{ var copyresult = obj instanceof array ?[]:{}; for(var key in obj){ if(obj.hasownproperty(key)){ copyresult[key]=typeof obj[key] ==="object"?deepcopy (obj[key]):obj[key]; } } } return copyresult; } var obj={ "data":[{"age":12},{"name":"xjz"}, {"adress":"changchun"}], callback:function(){ console.log("my love is zxb"); } };
下一篇: Ajax实现动态加载数据