为什么[1,2,3].protype===Array.prototype返回false



我正在Chrome控制台中玩Prototype。[1,2,3].prototype === Array.prototype不是等同于同一个原型吗?因为它们都包含相同的方法?

非类对象没有prototype属性。相反,他们有__proto__。所以这是有效的:

[1,2,3].__proto__ == Array.prototype
//=> true

但它已被弃用。如果你真的需要明确地检查原型,你可以在现代JS引擎中使用这个:

Object.getPrototypeOf([1,2,3]) == Array.prototype

然而,通常情况下,检查对象是否是类的实例的方法是使用instanceof:

[1,2,3] instanceof Array
//=> true

较旧的javascript引擎(也是当前的,但被认为已弃用(

[1,2,3].__proto__ === Array.prototype

现代javascript引擎(即非IE(

Object.getPrototypeOf([1,2,3]) === Array.prototype

添加一些值得注意的额外点,__proto__是不鼓励使用的内部属性,只需要根据语言规范在浏览器环境中实现,Object.getPrototypeOf()更好。

你也可以通过isPrototypeOf:

Array.prototype.isPrototypeOf([1,2,3])

最新更新