function deepClone(obj) {
let newObj = obj.constructor == Array ? [] : {};
for (let key in obj) {
if (typeof obj[key] != 'object') {
newObj[key] = obj[key];
} else {
newObj[key] = deepClone(obj[key]);
}
}
return newObj;
}
let obj = {
name1: {
name2: '张三'
},
name3: '李四',
age: [1, 2, 3, 4],
age1: 12,
say: function() {
console.log('说话');
}
}
let obj1 = deepClone(obj);
console.log(obj);
obj.name3 = '小华'
console.log(obj);
console.log(deepClone(obj)); //问题:obj1 不等于 deepClone(obj)吗?
console.log(obj1);
最后两行打印出来的结果不一样,是因为,obj.name3=‘小华’,把obj里面的name3的属性改变了,再次深拷贝对象,得到的是改变后的对象,而obj1是改变obj之前拷贝的原obj,所以拷贝的是原来的obj。