4 回答
TA贡献1816条经验 获得超6个赞
因为你不是同一个对象的引用!它们是(表面上)看起来相同的两个对象。
想想任何一家商店,你从货架上拿了一件商品,它后面有十几种相同的商品。仅仅因为它们看起来相同并不能使它们成为相同的项目。
let userTwo = userOne;创建对同一项目的第二个引用。
let userTwo = {...userOne}创建一个新对象并将拥有的和可枚举的属性复制到该新对象。
在前面的例子中有两个对象。但是这个呢:
let userOne = {
name: "Test",
surname: "Test surname",
sizes: {
width: 200,
height: 200,
}
}
let userTwo = {
...userOne
}
userTwo.sizes.width = 50;
alert(userOne.sizes.width); // 50
在这里userOne.size === userTwo.size。所以如果你改变一个......另一个是相同的。
但是userOne !== userTwo。
你和你的兄弟姐妹可以有同一个父亲,如果他失去了一只手臂,那么这不仅适用于你们中的一个。但这并不能使您和您的兄弟姐妹成为同一个人。
TA贡献1796条经验 获得超7个赞
它们不是同一个对象。
您有两个不同的对象,但第二个对象具有第一个对象的属性,并使用spread syntax复制到其中。
如果第二个对象中包含更多属性,则演示起来会更清楚。
let userOne = {
name: "Test",
surname: "Test"
}
let userTwo = { ...userOne,
yearOfBirth: 2000
};
console.log({
userOne
});
console.log({
userTwo
});
如您所见,附加值被添加到第二个对象而不是第一个对象。
TA贡献1801条经验 获得超8个赞
es6 传播运算符{...userOne}
,创建对象的副本userOne
并将其存储在不同的内存位置,这也等于此,
let userTwo = Object.assign({}, userOne);
但是如果你将对象分配给另一个,
let userThree = userOne;
这将返回 true。
另一方面,这只比较值
userOne.name === userTwo.name
所以它返回 true。
添加回答
举报