我想了解JavaScript身份和相等运算符的奇怪行为,如下所示。
var a = {};
var b = {};
a === b; //false
a == b; //false
var c = '';
var d = '';
c === d; //true
c == d; //true
所有四个变量a
,b
,c
和d
都是对象。但是在比较它们时,第一种情况会产生错误,而第二种情况则会产生真实。
我从以下来源研究了比较:https://msdn.microsoft.com/en-us/library/d53a7bd4(v=vs.94).aspx
根据上面的文章,除了数字和布尔值之外,所有内容都是通过引用而不是值进行比较。那么第一种情况如何返回false,第二种情况如何返回true。
答案 0 :(得分:1)
c
和d
是字符串,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");