浅拷贝:拷贝后的结果会随着被拷贝元素改变而改变(类似于C语言中,拷贝了指向该元素的指针)
var obj1 = {
name: 'manman',
number: [1, 2, 3]
}
var obj2 = obj1;
obj1.name = "newmanman"
console.log(obj1, obj2);
运行结果:
{name: “newmanman”, number: Array(3)}
{name: “newmanman”, number: Array(3)}
深拷贝:拷贝后的结果不会随着被拷贝元素改变而改变
通过递归拷贝每个元素的值即可
var obj1 = {
name: 'manman',
number: [1, 2, 3]
}
function copy(obj1) {
var obj2 = obj1.constructor === Array ? [] : {};
for (var key in obj1) {
if (typeof obj1[key] == 'object') {
obj2[key] = copy(obj1[key]);
} else {
obj2[key] = obj1[key];
}
}
return obj2;
}
var obj2 = copy(obj1);
obj1.name = "newmanman"
console.log(obj1, obj2);
运行结果:
{name: “newmanman”, number: Array(3)}
{name: “manman”, number: Array(3)}