Vladimir Starkov
Vladimir Starkov

Reputation: 19803

Why is Array.prototype also an Array?

I thought every prototype should be an object.

Why?

console.log(Array.isArray(Array.prototype)); // true

developer.mozilla.org explains nothing.

Upvotes: 4

Views: 1171

Answers (2)

user247702
user247702

Reputation: 24212

Your assumption that every prototype is an Object is not correct.

console.log(String.prototype)
console.log(Number.prototype)
console.log(Boolean.prototype)
console.log(Array.prototype)
console.log(Object.prototype)

Output:

String {}
Number {}
Boolean {}
[]
Object {}

From the ECMAScript Language Specification - 15.4.4 Properties of the Array Prototype Object (emphasis mine)

The value of the [[Prototype]] internal property of the Array prototype object is the standard built-in Object prototype object (15.2.4).

The Array prototype object is itself an array; its [[Class]] is "Array", and it has a length property (whose initial value is +0) and the special [[DefineOwnProperty]] internal method described in 15.4.5.1.

Upvotes: 5

iLikePrograms
iLikePrograms

Reputation: 468

Try typing this into your javascript console: typeof Array.prototype;

The Array.prototype is actually an Array. Which is detailed on this page.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype

It probably has something to do with the Fact that [] is shorthand for Array.

So Array.prototype points to []. Array.prototype.constructor points to function Array() { [native code] }

[].constructor also points to function Array() { [native code] }

So at a guess, it is done this way so that you can user Array and [] interchangably.

I dont know for sure this is the reason, but thats my best guess.

Upvotes: -1

Related Questions