EJS中的以下代码表明,具有相同属性的两个对象不一定相同' value'。所以我想知道在比较两个对象时,相等运算符实际使用了什么值。从环顾四周我可以看到它是一个参考'。但这个参考是什么?它是一个内存地址吗?
let object1 = {value: 10};
let object2 = object1;
let object3 = {value: 10};
console.log(object1 == object2);
// → true
console.log(object1 == object3);
// → false
答案 0 :(得分:3)
是的,但您无法访问内存,因为这是一种内存管理语言。
(澄清:不一定,引用可以不同方式实现。)
答案 1 :(得分:2)
如果这些值是非原始值,则比较是通过内存中的引用进行的。
根据您的情况,这就是内存的样子:
+-----------------+------------------+------------------+
| object1 | object2 | object3 |
+-----------------+------------------+------------------+
| | | | |
| {value: 10} <-----------+ | {value: 10} |
| | | |
+-----------------+------------------+------------------+
因此,object1
和object2
指向相同的值,object3
指向另一个值。
Equality operators
Equality (==)
如果操作数不是同一类型,则等于运算符会转换操作数,然后应用严格比较。如果两个操作数都是对象,那么 JavaScript会比较内部引用,当操作数引用内存中的同一对象时,它们是相等的。
答案 2 :(得分:0)
实际上它们是同一个对象,如果你修改第一个的值,就像这个
object1.value = 5;
然后你查阅第二个的值,你会发现它也被改变了
console.log(object2.value)
// → 5
kitty === pillow paws // -> true, it's the same cat