Dlaczego prymitywy JavaScript nie są obiektami Object?

Dzisiaj zdarzyło mi się mieć zbyt dużo czasu na zabicie i grałem trochę z linią poleceń Node (v0.10.13):

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

Teraz, zgodnie zMDN, coinstanceof robi to:

Operator instanceof sprawdza, czy w łańcuchu prototypu znajduje się właściwość prototypu konstruktora.

Ale wyraźnieObject.prototype Jest w1łańcuch prototypów. Dlaczego tak jest1 instanceof Object fałszywy? Być może dlatego1 czy prymityw nie jest obiektem na początku?

Dobra, akceptuję to i zrobiłem więcej testów:

> (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'

Najwyraźniej wszystkie prymitywy liczbowe dziedziczą z jednego obiektu, a wszystkie prymitywy łańcuchowe dziedziczą z innego obiektu. Oba te 2 obiekty dziedziczą zObject.prototype.

Teraz pytanie brzmi: jeśli liczby i łańcuchy są uważane za prymitywy, to po co dziedziczyć je z innych obiektów? Lub odwrotnie, skoro odziedziczyli po innych obiektach, dlaczego nie uważać ich za obiekty? Wydaje mi się nonsensowne, że dziecko obiektu nie jest obiektem ..

Przy okazji, przetestowałem je również w Firefoksie 22 i uzyskałem taki sam wynik.

questionAnswers(1)

yourAnswerToTheQuestion