¿Por qué las primitivas de JavaScript no son ejemplos de objetos?

Hoy tuve mucho tiempo para matar y jugué un poco con la línea de comandos Nodo (v0.10.13):

> 1 instanceof Object
false
> (1).__proto__
{}
> (1).__proto__ instanceof Object
true
> (1).__proto__.__proto__ === Object.prototype
true

Ahora, de acuerdo aMDN, quéinstanceof hace es

El operador instanceof comprueba si un objeto tiene en su cadena de prototipo la propiedad prototipo de un constructor.

Pero claramenteObject.prototype Es en1La cadena del prototipo. Entonces por que es1 instanceof Object ¿falso? Quizás porque1 Para empezar, ¿no es un objeto primitivo?

De acuerdo, acepto eso, e hice más pruebas:

> (1).__proto__ === (2).__proto__
true
> 'a'.__proto__ === 'b'.__proto__
true
> (1).__proto__ === 'a'.__proto__
false
> (1).__proto__.__proto__ === 'a'.__proto__.__proto__
true
> (1).__proto__.type = 'number'
'number'
> 'a'.__proto__.type = 'string'
'string'
> (2).type
'number'
> (1.5).type
'number'
> 'b'.type
'string'

Así que aparentemente todas las primitivas numéricas heredan de un objeto, y todas las primitivas de cadena heredan de otro objeto. Ambos estos 2 objetos heredan deObject.prototype.

Ahora la pregunta es, si los números y las cadenas se consideran primitivos, ¿por qué heredarlos de otros objetos? O a la inversa, ya que heredan de otros objetos, ¿por qué no considerarlos también como objetos? Me parece absurdo que el hijo de un objeto no sea un objeto ...

Por cierto, también los he probado en Firefox 22 y obtuve el mismo resultado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta