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

Osc*_*son 8 javascript ecmascript-5

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

其他一些例子:

{} == {} // => false
[] == [] // => false
/ / == / / // => false
new String() == new String() // => false
Run Code Online (Sandbox Code Playgroud)

但是,Strings也是对象(这就是为什么你可以做''.replace()和扩展它们),为什么这个工作:

'' == '' // => true
Run Code Online (Sandbox Code Playgroud)

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

Nor*_*ard 4

JavaScript 基本上始终将字符串和数字视为标量,在调用方法时将它们转换为对象,然后在没有显式声明的情况下转换回来new String("");

与数字相同。

如果没有字符串/数字/布尔相等,您将很难做很多事情。