本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.14节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.14 复杂对象比较采用引用比较
复杂对象只有在引用相同的对象(即有相同的地址)时才相等。包含相同对象的两个变量彼此不相等,因为它们并不指向同一个对象。
下面的示例中,objectFoo和objectBar有相同的属性,实际上也是完全相同的对象,但通过===询问它们是否相等时,JavaScript会告诉我们:它们是不相等的。
<!DOCTYPE html><html lang="en"><body><script>
var objectFoo = { same: 'same' };
var objectBar = { same: 'same' };
// 输出false, JS并不关注它们的类型是否相同
console.log(objectFoo === objectBar);
// 复杂对象如何才相等
var objectA = { foo: 'bar' };
var objectB = objectA;
console.log(**objectA === objectB**); // 输出true,因为它们引用的是同一个对象
</script></body></html>
这里的重点是,指向内存中复杂对象的变量,只有在引用相同“地址”的情况下才是相等的。相反,两个单独创建的对象,即使具有相同的类型并拥有完全相同的属性,它们也是不相等的。