为了账号安全,请及时绑定邮箱和手机立即绑定

同一个对象的引用如何不能相等?

同一个对象的引用如何不能相等?

catspeake 2022-12-29 15:44:00
例如。:let userOne = {  name: "Test",  surname: "Test"}let userTwo = {  ...userOne}console.log(userOne === userTwo); // false但是,例如:console.log(userOne.name === userTwo.name); // true所以 userOne 和 userTwo 是同一对象的两个引用,但console.log(userOne === userTwo);返回 fasle。为什么?修改: 好的。在前面的例子中有两个对象。但是这个呢: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 和 userTwo 是同一个对象的引用。但:alert(userOne == userTwo);// false那么这两个引用不指向同一个对象?
查看完整描述

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。


你和你的兄弟姐妹可以有同一个父亲,如果他失去了一只手臂,那么这不仅适用于你们中的一个。但这并不能使您和您的兄弟姐妹成为同一个人。


查看完整回答
反对 回复 2022-12-29
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

它们不是同一个对象。


您有两个不同的对象,但第二个对象具有第一个对象的属性,并使用spread syntax复制到其中。


如果第二个对象中包含更多属性,则演示起来会更清楚。


let userOne = {

  name: "Test",

  surname: "Test"

}


let userTwo = { ...userOne,

  yearOfBirth: 2000

};


console.log({

  userOne

});

console.log({

  userTwo

});

如您所见,附加值被添加到第二个对象而不是第一个对象。



查看完整回答
反对 回复 2022-12-29
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

es6 传播运算符{...userOne},创建对象的副本userOne并将其存储在不同的内存位置,这也等于此,

let userTwo = Object.assign({}, userOne);

但是如果你将对象分配给另一个,

let userThree = userOne; 这将返回 true。

另一方面,这只比较值

userOne.name === userTwo.name所以它返回 true。



查看完整回答
反对 回复 2022-12-29
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

由于您在 equals() 方法中给出的逻辑,默认情况下它们是相等的。



查看完整回答
反对 回复 2022-12-29
  • 4 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信