JavaScript中的对象比较

Object comparisons in JavaScript

本文关键字:比较 对象 JavaScript      更新时间:2023-09-26

我想了解JavaScript标识和相等操作符的奇怪行为,如下所示。

var a = {};
var b = {};
a === b; //false
a == b;  //false
var c = '';
var d = '';
c === d; //true
c == d;  //true

四个变量a, b, cd都是对象。但是当比较它们时,第一种情况为假,而第二种情况为真。

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

根据上面的文章,除了数字和布尔值之外,所有的东西都是通过引用而不是值来比较的。第一种情况返回false,第二种情况返回true

示例中的cd是字符串,它们是JavaScript中的基本类型,并按值进行比较。

因此,c == d返回true

本文讨论的是使用new String('foo')构造函数创建的字符串对象,该构造函数实际创建对象。在本例中,比较引用,返回false

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

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

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

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


==的工作方式与===相同,除了它进行类型转换以"尽可能使事物相等"。对于引用类型,这与===相同,除了它还等同于基本字符串和String对象。

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