如果[]是[]而Array.prototype是[]为什么不([] == Array.prototype)

qwe*_*ymk 4 javascript prototype type-conversion type-coercion

我在控制台搞乱,看到以下内容:

>>> []
[]
>>> Array.prototype
[]
>>> [] == Array.prototype
false
>>> [] === Array.prototype
false
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?(听起来像wtfjs的一个很好的候选人)

Rap*_*ien 8

在Javascript中,== on数组是指针相等,即只有两个数组都是同一个对象才为真.如果数组不是指针相等,那么存储到一个不会影响另一个.

  • @deceze,@ if:看起来似乎Array的`prototype`确实是Array的一个实例.如果你做`Object.prototype.toString.call(Array.prototype);`它返回`[object Array]`.看起来有几种类型将自己的实例作为原型对象.对于`String`,`Number`,`Boolean`,`Date`以及显然`Object`来说也是如此. (3认同)