在JS对象比较中实际比较了什么?

时间:2018-03-22 20:48:56

标签: javascript

EJS中的以下代码表明,具有相同属性的两个对象不一定相同' value'。所以我想知道在比较两个对象时,相等运算符实际使用了什么值。从环顾四周我可以看到它是一个参考'。但这个参考是什么?它是一个内存地址吗?

let object1 = {value: 10};
let object2 = object1;
let object3 = {value: 10};

console.log(object1 == object2);
// → true
console.log(object1 == object3);
// → false

3 个答案:

答案 0 :(得分:3)

是的,但您无法访问内存,因为这是一种内存管理语言。

(澄清:不一定,引用可以不同方式实现。)

答案 1 :(得分:2)

如果这些值是非原始值,则比较是通过内存中的引用进行的。

根据您的情况,这就是内存的样子:

      +-----------------+------------------+------------------+
      |     object1     |      object2     |     object3      |
      +-----------------+------------------+------------------+
      |                 |         |        |                  |
      |   {value: 10} <-----------+        |   {value: 10}    |
      |                 |                  |                  |    
      +-----------------+------------------+------------------+

因此,object1object2指向相同的值,object3指向另一个值。

  

Equality operators

     

Equality (==)

     

如果操作数不是同一类型,则等于运算符会转换操作数,然后应用严格比较。如果两个操作数都是对象,那么 JavaScript会比较内部引用,当操作数引用内存中的同一对象时,它们是相等的。

答案 2 :(得分:0)

实际上它们是同一个对象,如果你修改第一个的值,就像这个

object1.value = 5;

然后你查阅第二个的值,你会发现它也被改变了

console.log(object2.value) // → 5

顺便说一句,如果你有一只名叫凯蒂猫的小猫。但是你的妈妈给他起了个名字,他把枕头放在了枕头上,

kitty === pillow paws // -> true, it's the same cat