首页 > 解决方案 > 同一个对象的引用怎么不能相等?

问题描述

例如。:

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

那么这两个引用不指向同一个对象吗?

标签: javascriptobject

解决方案


因为你不是同一个对象的引用!它们是(表面上)看起来相同的两个对象。

想想任何类型的商店,你从货架上拿一个产品,后面有十几个相同的产品。仅仅因为它们看起来相同并不能使它们成为相同的项目。

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

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


推荐阅读