4 回答

TA貢獻(xiàn)1816條經(jīng)驗 獲得超6個贊
因為你不是同一個對象的引用!它們是(表面上)看起來相同的兩個對象。
想想任何一家商店,你從貨架上拿了一件商品,它后面有十幾種相同的商品。僅僅因為它們看起來相同并不能使它們成為相同的項目。
let userTwo = userOne;創(chuàng)建對同一項目的第二個引用。
let userTwo = {...userOne}創(chuàng)建一個新對象并將擁有的和可枚舉的屬性復(fù)制到該新對象。
在前面的例子中有兩個對象。但是這個呢:
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貢獻(xiàn)1796條經(jīng)驗 獲得超7個贊
它們不是同一個對象。
您有兩個不同的對象,但第二個對象具有第一個對象的屬性,并使用spread syntax復(fù)制到其中。
如果第二個對象中包含更多屬性,則演示起來會更清楚。
let userOne = {
name: "Test",
surname: "Test"
}
let userTwo = { ...userOne,
yearOfBirth: 2000
};
console.log({
userOne
});
console.log({
userTwo
});
如您所見,附加值被添加到第二個對象而不是第一個對象。

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
es6 傳播運(yùn)算符{...userOne}
,創(chuàng)建對象的副本userOne
并將其存儲在不同的內(nèi)存位置,這也等于此,
let userTwo = Object.assign({}, userOne);
但是如果你將對象分配給另一個,
let userThree = userOne;
這將返回 true。
另一方面,這只比較值
userOne.name === userTwo.name
所以它返回 true。
添加回答
舉報