为什么以下比较输出错误?

时间:2012-01-23 03:41:42

标签: javascript operators

假设Array没有被覆盖,为什么以下比较输出错误?

[] === new Array()
> false

[] === []
> false

5 个答案:

答案 0 :(得分:1)

您要比较两个唯一的Array对象是否有身份,而不是内容。

答案 1 :(得分:1)

对象是不同的,因为它们是不同的内存段。例如:

var a = [],
    b = [];

a === b; // false
typeof a === typeof b; // true

注意:typeof语句将返回"object" not "array"。有更好的方法来确定对象是否是一个数组。但这足以解释。

答案 2 :(得分:1)

无论使用相等==运算符还是严格相等===运算符,如果操作数是对象,只有当两个操作数都引用相同的对象时,结果才为真

你的代码创建了两个不同的数组,都是空的,所以直观地看起来它们看起来是平等的,但这不是equals运算符的工作方式。

类似[1,2,3] === [1,2,3]之类的东西也是假的。同样很容易认为它们应该相等,但比较是测试数组是否是相同的数组,而不是数组中的所有元素是否相等。

另一方面,如果x === yx都引用同一个数组,y将为真。

有关详细信息:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators

答案 3 :(得分:1)

===运算符使用strict equality comparison algorithm,其在步骤7中说明:

  

如果x和y引用同一个对象,则返回true。否则,返回false。

因此,如果 a b 引用一个对象,那么仅当{em>一个和 b a === b >引用相同的对象(注意Arrays是Objects)。

答案 4 :(得分:0)

在JavaScript中,当您在对象上使用=====时(数组只是一个对象,[]只是语法糖),只返回true两个操作数都指向完全相同的对象,但如果它们引用2个不同的,甚至是相同的对象则不会。

例如:

js> var x = []
js> var y = []
js> x == y
false
js> x = y
js> x == y
true

将其视为两个人谈论同一个人的区别,而两个人分别谈论两个双胞胎中的每个人。