《JavaScript启示录》——1.14 复杂对象比较采用引用比较

简介: 复杂对象只有在引用相同的对象(即有相同的地址)时才相等。包含相同对象的两个变量彼此不相等,因为它们并不指向同一个对象。

本节书摘来自异步社区《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>

这里的重点是,指向内存中复杂对象的变量,只有在引用相同“地址”的情况下才是相等的。相反,两个单独创建的对象,即使具有相同的类型并拥有完全相同的属性,它们也是不相等的。

相关文章
|
2天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
23 3
|
1天前
|
设计模式 存储 消息中间件
JavaScript观察者模式:实现对象间的事件通信!
JavaScript观察者模式:实现对象间的事件通信!
|
1天前
|
设计模式 JavaScript 前端开发
JavaScript原型模式:实现对象共享属性和方法!
JavaScript原型模式:实现对象共享属性和方法!
|
1天前
|
JavaScript 前端开发 开发者
深入理解JavaScript对象创建
深入理解JavaScript对象创建
|
2天前
|
JavaScript 前端开发
js用Date对象处理时间
以上就是JavaScript中Date对象处理时间的一些基本方法。
6 0
|
2天前
|
JavaScript 前端开发
在JavaScript中,函数原型(Function Prototype)是一个特殊的对象
【5月更文挑战第11天】JavaScript中的函数原型是一个特殊对象,它为所有函数实例提供共享的方法和属性。每个函数在创建时都有一个`prototype`属性,指向原型对象。利用原型,我们可以向所有实例添加方法和属性,实现继承。例如,我们定义一个`Person`函数,向其原型添加`greet`方法,然后创建实例`john`和`jane`,它们都能调用这个方法。尽管可以直接在原型上添加方法,但推荐在构造函数内部定义以封装数据和逻辑。
18 2
|
2天前
|
JavaScript 前端开发
JavaScript 提供了多种方法来操作 DOM(文档对象模型)
【5月更文挑战第11天】JavaScript 用于DOM操作的方法包括获取元素(getElementById, getElementsByClassName等)、修改内容(innerHTML, innerText, textContent)、改变属性、添加/删除元素(appendChild, removeChild)和调整样式。此外,addEventListener用于监听事件。注意要考虑兼容性和性能当使用这些技术。
9 2
|
2天前
|
存储 JavaScript 前端开发
JavaScript对象方法详解
JavaScript对象方法详解
16 1
|
2天前
|
JavaScript
js多维数组去重并使具有相同属性的对象数量相加
js多维数组去重并使具有相同属性的对象数量相加
11 1
|
2天前
|
JavaScript
js的三种引用方式
js的三种引用方式
15 2