在项目中我们往往要使用到深拷贝 ,下面是实现深拷贝的方法
缺点
:数据类型为undefined
和function
不能拷贝let obj = {
id: 1,
name: '张三',
age: 10,
}
let newObj = JSON.parse(JSON.stringify(obj))
let obj1 = {
a: 1,
d: { name: '嘻嘻' },
e: [1, 9],
func: () => {}
}
let obj2 = Object.assign({}, obj1)
obj2.d.name = '哈哈'
obj2.e[0] = 6
obj2.a = 2
console.log('obj1:', obj1, 'obj2:', obj2)
//打印可以发现第一层实现了深拷贝 ,第二次是浅拷贝 obj1.d.name 也为哈哈 ,obj1.e为[6,9]
var obj = {
a: 1,
b: 2
}
var obj1 = {…obj}
//更改obj1二级obj二级也会改变
function deepClone(obj) {
var target = {};
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
if (typeof obj[key] === 'object') {
target[key] = deepClone(obj[key]);
} else {
target[key] = obj[key];
}
}
}
return target;
}
let obj2 = deepClone(obj1)
obj2.d.name = '哈哈' //可更改obj2属性不会影响obj1