为什么[1]不等于[1]?

时间:2013-11-05 13:31:31

标签: javascript

JavaScript中的

(1 == 1) === true;
(1 === 1) === true;

var a = 1;
var b = [1];
(a == b) === true

([1]==[1]) === false;

为什么会这样?我不知道

5 个答案:

答案 0 :(得分:13)

[1]和其他[1]是不同的对象,对象相等性定义为标识。换句话说,一个对象只等于它自己。

> a = [1]
[1]
> b = [1]
[1]
> a == b
false
> b = a
[1]
> a == b
true

参考:http://es5.github.io/#x11.9.3,步骤1.f适用于此处。

答案 1 :(得分:6)

因为[1][1]是Array对象的两个实例。因此,它们不相等(只有两个对象完全相同时才相等)。

但是,当您比较1[1]时,需要涉及类型杂耍。

通过使用逗号连接所有项目,可以将数组转换为字符串。这会产生字符串"1"

反过来,"1"可以投射到一个数字,给出11 == 1显然是正确的。

答案 2 :(得分:0)

因为数组是对象,并且它们是通过引用而不是值进行比较,所以只有相同的实例是相等的

例如:

var array1 = [1];
var array2 = array1;
(array1 == array2) === true;
(array1 == [1]) === false

答案 3 :(得分:0)

请参见此处:How to compare arrays in JavaScript?

[]语法是Array对象的文字构造函数,对象无法与其他对象进行比较(他们可以,但结果为负)。

答案 4 :(得分:0)

字符串和数字在JavaScript中是不可变的,因此当您执行"string" === "string"1 === 1之类的操作时,您实际上会将内存中某个块的内容与自身进行比较,而您正构建一个每次使用构造函数时都要使用新的Array对象。

我希望这是有道理的。