我知道在 SO 上有类似的问题,但没有一个能提供我正在寻找的答案。
在 JavaScript 中,如果执行以下操作,结果将为 false:
我知道这与规范中 JavaScript 的定义方式有关,但为什么会这样?这是违反直觉的。
如果 ("string"=== "string")
结果为 true
,那么为什么 ({ } === { } )
结果为真?
我在某处看到平等算法被设计为类似于 C++ 或 C# 的算法,但这就像发明一种全新的引擎,使用 1/10 的燃料,而不是纯粹为了与其他汽车保持一致。
为什么 JavaScript 是这样定义的?这个决定背后有什么原因吗?或者只是为了让人看到它在做已完成的事情?
{}
是在 javascript 中创建对象的文字。那就是你可以替换
var obj = new Object();
与
var obj = {};
所以任何时候你使用{}
您正在创建一个新对象。
您提到的行,{} == {}
创建两个不同的对象,两者都没有属性。同样,它们是相同的,就像你有 equals(obj1, obj2)
比较 obj1 和 obj2 的属性的方法,如果两者的所有属性值都相同,它应该返回 true。
但是==
运算符(operator)不会检查属性。它检查两个对象是否指向相同的对象/引用。
鉴于
var obj1 = {};
obj2 = obj1;
console.log(obj2 == obj1); //returns true
返回 true 因为 obj1 和 obj2 指向相同的引用。
最后,关于字符串 "abc" == "abc"
, 在这里 ==
运算符查找实际的字符串内容并根据它返回 true/false。