数组相等性 / 不等性

5
有人能解释一下为什么这些JavaScript数组不等式比较会评估为true吗?
[""] !== [""]

[1] !== [1]

[] !== []


[""] != [""]

[1] != [1]

[] != []

2
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators - Denys Séguret
@GeorgeCummins 嗯,在大多数编程语言中都是一样的。 - Denys Séguret
1
我的房子和你的房子都是房子,但是我的房子 !== 你的房子 -> true。 - Xotic750
1个回答

8

===严格相等
比较对象时,仅当两侧引用同一个对象时才返回true。

[][]是两个不同(但等价)的对象,因此它返回false。


==是弱相等。

它会尝试将两个操作数转换为相同类型,如规范所述。

但是,它也通过引用标识来比较对象。


请注意,比较字符串字面量将产生true(“a”===“a”),但比较String对象将产生false:new String(“a”)=== new String(“a”)。因此,我得出结论,字符串字面量不被视为对象,并以类似于Java语言的方式进行“内部化”。 - Norman Cousineau
1
@normc:不是的。与Java不同,Javascript有一个字符串原始类型,就像数字一样。new String("a")将其封装为对象。例如,var a = "a"; a.b = 2; alert(a.b); // undefined - SLaks
@normc:盒装字符串对象几乎从不使用;所有字符串操作都返回基元。 - SLaks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接