0.起因
学习前辈的代码,发现有个地方用到了Object.assign这个我之前没见过的东西,就看了看具体是个什么东西,发现它在对象拷贝方面挺666的,故做记录。
1.用法
Object.assign(生成对象,拷贝对象)
该方法用于将所有自有的可枚举的属性的值从一个或多个源对象复制到目标对象,并返回目标对象。
以两个不同的拷贝方式举例子
let object = {
oil: "-",
produce: "-",
net: "-",
hot: "-",
CO2: "-",
};
let object2 = Object.assign({}, object);
console.log("Before///object2: ", object2);
let equalObject2 = object;
console.log("equalObject", equalObject2);
object.oil = "ooooooChange";
console.log("After///object2: ", object2);
console.log("equalObject", equalObject2);
结果如下
2.思考
Object.assign()方法复制的是源对象的属性值,如果源对象的属性是指向另一个对象的引用,那么它只会复制这个引用值(浅复制),不会深复制这个引用值所引用的对象。
使用Object.assign生成的object2是浅拷贝,拿过来是什么就是什么,拷贝的object改变也不会影响它的值。
直接用等号的就是深拷贝,object改变也会影响equalObject的改变。