JavaScript中的对象比较

时间:2016-08-24 13:18:58

标签: javascript

我想了解JavaScript身份和相等运算符的奇怪行为,如下所示。

var a = {};
var b = {};
a === b; //false
a == b;  //false

var c = '';
var d = '';
c === d; //true
c == d;  //true

所有四个变量abcd都是对象。但是在比较它们时,第一种情况会产生错误,而第二种情况则会产生真实。

我从以下来源研究了比较:https://msdn.microsoft.com/en-us/library/d53a7bd4(v=vs.94).aspx

根据上面的文章,除了数字和布尔值之外,所有内容都是通过引用而不是值进行比较。那么第一种情况如何返回false,第二种情况如何返回true。

2 个答案:

答案 0 :(得分:1)

您的示例中的

cd是字符串,which are primitive types in JavaScript and compared by value

因此,c == d会返回true

文章讨论string objects创建了new String('foo')构造函数,它实际上创建了对象。在这种情况下,比较引用,返回false

console.log(new String('foo') == new String('foo')) // false
console.log('foo' == 'foo')                         // true

答案 1 :(得分:0)

(原始)字符串是值类型(如Number)。因此===比较它的值(相等)。

对象是引用类型,对于它们===比较标识。

字符串有点疯狂,因为有原始字符串和String对象(使用new String("foo")创建)。

==的工作方式与===的工作方式相同,只是它会将转换类型设置为“尽可能使事情变得平等”。对于引用类型,这与===相同,除了它还等同于原始字符串和String对象。

 "abc" == new String("abc");
 "abc" !== new String("abc");