Почему примитивы JavaScript не являются экземплярами Object?

Сегодня у меня было слишком много времени, чтобы убить, и я немного поиграл с командной строкой Node (v0.10.13):

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

Теперь согласноMDN, какиеinstanceof делает это:

Оператор instanceof проверяет, имеет ли объект в своей цепочке прототипов свойство prototype конструктора.

Но ясноObject.prototype В '1Прототип цепи. Так почему же1 instanceof Object ложный? Возможно потому что1 примитив не объект для начала?

Хорошо, я принимаю это, и я сделал больше тестов:

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

Таким образом, очевидно, что все числовые примитивы наследуются от одного объекта, а все строковые примитивы наследуются от другого объекта. Оба эти 2 объекта наследуются от.Object.prototype

Теперь возникает вопрос: если числа и строки считаются примитивами, зачем наследовать их от других объектов? Или наоборот, поскольку они наследуются от других объектов, почему бы не считать их объектами тоже? Мне кажется бессмысленным, что ребенок объекта нет объект ..

Кстати, я также протестировал их в Firefox 22 и получил тот же результат.

Ответы на вопрос(1)

Ваш ответ на вопрос