在JavaScript中,除了字符串之外,为什么没有任何对象彼此相等?

时间:2013-05-21 23:36:29

标签: javascript ecmascript-5

JS中的所有东西都是一个对象。我一直都知道,我完全理解这一点。我知道为什么{} !== {}。这是两个不同的对象。就像你写出new Object() == new Object()一样。

其他一些例子:

{} == {} // => false
[] == [] // => false
/ / == / / // => false
new String() == new String() // => false

但是,字符串也是对象(这就是为什么你可以''.replace()并扩展它们),所以为什么这样做:

'' == '' // => true

显然,如果这不起作用,比较两个字符串会非常头疼,但这似乎与语言的其余部分不一致。在内部,发生了什么?它只是一次性还是有其他概念背后的呢?

3 个答案:

答案 0 :(得分:4)

JavaScript基本上将字符串和数字视为标量,在调用方法时将它们转换为对象,然后在未明确声明new String("");

的情况下转换回来

与数字相同。

没有字符串/数字/布尔相等,你就很难做很多事情。

答案 1 :(得分:3)

这是一次性的。

Reference

字符串文字和字符串对象之间存在差异。如果您有兴趣,本文将详细介绍。

布尔人和数字也是如此。这些基元与对象的比较不同。

答案 2 :(得分:0)

JavaScript中有五种基本类型:Number,String,Boolean,Undefined和Null。将空字符串文字""与其自身进行比较与比较5 === 5没有区别。