浅拷贝 :
- 浅拷贝,仅仅是指针给了另一个对象
var obj = {
name: '又双叒叕', age: 999, say() {
console.log('强无敌');
}
};
// 将指向obj1
var obj1 = obj;
// 值和obj 相等
console.log(obj);
console.log(obj1);
打印如下
如果修改obj的属性 那么obj1也会随之改变 可以理解成拿人手短 吃人嘴软
obj1.name = '武大郎';
console.log(obj);
深拷贝: 两个对象之间没有任何关系
有常用的三种深拷贝的方式
- 通过json实现, 但是会造成方法丢失
var obj = {
name: '又双叒叕', age: 999, say() {
console.log('强无敌');
}
};
var obj1 = JSON.stringify(obj);
obj1 = JSON.parse(obj1);
//console.log(obj1);
obj.name = '小番茄';
// 修改obj感受不到变化 但是obj不会受到影响
console.log(obj1);
obj1 打印结果:
2. 通过for-in遍历循环,实现深拷贝
var obj = {
name: '又双叒叕', age: 999, say() {
console.log('强无敌');
}
};
var obj1 = {};
for (var attr in obj) {
obj1[attr] = obj[attr]
}
// console.log(obj1);
obj1.say()
// 修改obj
obj.name = '哈希';
console.log(obj1); // 修改后还是原数据 不会受到影响
- 使用Object.assign()
var obj = {
name: '又双叒叕', age: 999, say() {
console.log('强无敌');
}
};
var obj1 = {};
//将obj合并到obj1上
Object.assign(obj1, obj);
//console.log(obj1);
obj1.age = 66;
// 修改以后也是不会受到影响
console.log(obj);