浅拷贝会创建一个新对象 ,这个对象有着原始对象属性值的一份精确拷贝。 如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用数据类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象,只拷贝一层。
举个例子:
第一种直接拷贝对象到目标对象
let obj = {
a: 1,
b: {
c: 2,
},
}
let obj1 = {...obj
}
obj1.a = 2 // 浅拷贝只是拷贝了属性,没有拷贝属性对应的值,值改变,原对象不会改变
obj1.b.c = 3 //拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,另一个对象也会改变
console.log('obj', obj)
console.log('obj1', obj1)
对象中的Object.assign方法
这个方法是把一个对象中的所有的属性和对应的值复制到另一个对象中
举一个例子:
第二种运用Object.assgin()方法
let obj = {
a: 1,
b: {
c: 2,
},
}
let obj3 = {};
Object.assign(obj3, obj); //Object.assign(目标对象, 源对象)
obj.a = 2; //仅仅改变当前对象中属性值
console.log('obj', obj);
console.log('obj3', obj3);
for...in 方法
for...in方法遍历整个对象,包括所有的属性和值
let obj4 = {};
for (const key in obj) { //key 代表的是对象中所有的键值对
obj4[key] = obj[key]; //将键值对赋值给obj4
}
obj4.a = 2;
console.log('obj', obj);
console.log('obj4', obj4);