浅拷贝只拷贝一层,对于对象内的简单数据类型,浅拷贝进行复制,而对象内的复杂的数据类型,则是复制了地址(即是指向原来的数据),如果对复杂类型进行修改,则原对象也会被修改,造成污染数据。
如果改变newObj中的age,oldObj也会被改变
newObj.inObj.age = 10打印输出结果
console.log(oldObj) console.log(newObj)将复杂数据类型也进行拷贝,而不是简单的复制地址,使用递归实现:
// 深拷贝 function deepCopy (newObj,oldObj){ for (k in oldObj) { if(oldObj[k] instanceof Array){ newObj[k] = [] deepCopy(newObj[k],oldObj[k]) }else if (oldObj[k] instanceof Object){ newObj[k] = {} deepCopy(newObj[k],oldObj[k]) }else{ newObj[k] = oldObj[k] } } } deepCopy(newObj,oldObj)改变newObj中的age,oldObj不会被改变
newObj.inObj.age = 10输出拷贝结果