比较 JavaScript 中的对象

IT技术 javascript
2021-03-02 02:35:12

我有这个代码:

var object1 = {same:'test'}
var object2 = {same:'test'};       
console.log(object1 === object2)

在控制台中返回false

我也有这个代码:

var object1 = {same:'test'}
var object2 = object1;
console.log(object1 === object2)  

在控制台中返回true

我知道 '===' 是一个相等运算符,但我不知道它在对象上是如何工作的。

为什么第一个示例返回 false?

6个回答

看到这个球了吗?它的颜色是红色。称之为ball1。

看到这个球了吗?它的颜色是红色。称之为ball2。

ball1 和 ball2 是同一个物体吗?不,它们是恰好具有相同属性的不同对象。


看到这个球了吗?它的颜色是红色。称之为ball1。

让我们调用 ball1、ball2。

ball1 和 ball2 是同一个物体吗?是的。他们是同一个球。

很好的比喻。还要考虑如果我们决定把 ball2 涂成绿色,ball1 会发生什么。
2021-05-14 02:35:12
很好的比喻(我完全在偷它):)
2021-05-14 02:35:12
适用于多种语言。不仅是java脚本。这篇文章应该添加到 Stackoverflow wiki :D
2021-05-14 02:35:12
+1。解释我如何问“这两个球的外观和行为是否相同?”的加分点。
2021-05-18 02:35:12
这是一个不错的类比,但它也可能有助于解释计算机在为变量赋值时实际在做什么,以便 OP 可以更多地了解他们的两个示例背后发生的事情。
2021-05-20 02:35:12

对象通过引用相等进行比较,并且由于object1object2是两个不同的实例,因此它们是不同的对象(将其视为:它们在内存中占据不同的位置)。

然而,如果你将 object1 分配给 object2,它们都指向内存中的同一个位置,因此是相等的(它们是对同一个对象的两个引用,它在内存中只存在一次)。通过更改属性object1.same = 'uiae';也会更新该属性object2.same(因为它们实际上是相同的对象和相同的属性)

var object1 ={same:'test'}
var object2 ={same:'test'};       
console.log(object1 === object2)

在这种情况下,您正在创建两个不同的对象。这就是为什么它在使用===运算符检查时在控制台中返回false的原因

var object1 ={same:'test'}
var object2 =object1;
console.log(object1 === object2)

在这种情况下,您正在创建一个对象,并且 object1 和 object2 引用了创建的对象,这就是为什么当您使用===运算符检查时它返回 true 的原因

在第二种情况下,如果我们更改object2["same"]="test2"then object1["same"] 值也会更改为test2

在第一种情况下它不会那样发生,因为object1object2是两个不同的对象。

参考这个: JavaScript 中的对象相等

希望这可能会有所帮助。

在第一种情况下,Object1 和 Object2 是两个不同的参考点(或变量),指向内存中的两个不同对象。因此,当您检查它们是否相等时,结果为假。

在第二种情况下,您只是将参考点(地址)从 Object1 复制到 Object2,这意味着两个参考点现在都在引用内存中的同一个对象。所以结果为真。

对象总是通过引用进行比较。

当您将对象或数组从一个变量分配给另一个变量时,它会复制对原始对象的引用,因此这两个对象是相等的。

每次编写对象或数组字面量时,都会生成不同的对象或数组,因此即使内容相似,它们也不相等。