:
(1 == 1) === true;
(1 === 1) === true;
和
var a = 1;
var b = [1];
(a == b) === true
但
([1]==[1]) === false;
为什么会这样?我不知道
答案 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"
可以投射到一个数字,给出1
。 1 == 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对象。
我希望这是有道理的。