浅拷贝:只做一层拷贝,问题:如果对象的某个属性是引用类型,就会出现问题。
深拷贝:遇到某一条属性是引用类型,也会拷贝过来,但是引用地址是不一样的。
<script type="text/javascript">
const obj = {
a:1,
b:["a","b"]
}
function extend(o1,deep){//deep为true是深拷贝
var obj = {};
if(o1 instanceof Array){
obj = []
}
for(var key in o1){
var value = o1[key];
//确定value是不是引用类型,前提是deep:true
obj[key] = (!!deep && typeof value==="object" && value !== null) ? extend(value,deep) : value
}
return obj
}
const obj2 = extend(obj,true);
obj2.b.push("c");
console.log(obj);
console.log(obj2);
</script>

//另一种拷贝
const obj3 = {
a:1,
b:["a","b"]
}
const obj4 = JSON.parse(JSON.stringify(obj3));
obj4.b.push("c");
console.log(obj3);
console.log(obj4);

网友评论