Потому что прототипы есть
только у объектов, то есть у сущностей (entity) для которых верно
typeof entity === 'object'
Правда тут есть одно исключение - в спеке нет типа function, а во всех реализациях он есть по историческим причинам. То есть с точки зрения спеки:
typeof function(){} === 'object'
а на деле:
typeof function(){} === 'function'
Поэтому правильное тождество будет такое:
typeof entity === 'object' || typeof entity === 'function'
У остальных типов прототипа нет, в чем можно легко убедится
1 instanceof Number
1 instanceof Object
'a' instanceof String
'a' instanceof Object
true instanceof Boolean
true instanceof Object
1n instanceof BigInt
1n instanceof Object
Symbol() instanceof Symbol
Symbol() instanceof Object
null instanceof Object
undefined instanceof Object
все эти выражения
ложны, а как известно instanceof проверяет именно прототипы.
А для того чтоб работали методы для большинства этих типов есть объектные обертки, к которым присутствует неявное приведение при обращении к свойствам через точку или квадратные скобки. Эти обертки не сложно получить передав данные примитивы в Object как функцию, а не как конструктор:
Object(1) instanceof Number
Object(1) instanceof Object
Object('a') instanceof String
Object('a') instanceof Object
Object(true) instanceof Boolean
Object(true) instanceof Object
Object(1n) instanceof BigInt
Object(1n) instanceof Object
Object(Symbol()) instanceof Symbol
Object(Symbol()) instanceof Object
все эти выражения
истинны.
Однако надо понимать, что обертка - это уже не примитив:
typeof Object(1) === 'object'
typeof Object('a') === 'object'
typeof Object(true) === 'object'
typeof Object(1n) === 'object'
typeof Object(Symbol()) === 'object'
это все так же
истинно.
А вот у юнит-типов (типов-значений) null и undefined таких оберток нет. И хотя
Object(null)
и
Object(undefined)
возвращают просто пустой объект, обратится к методам null и undefined нельзя:
null.property // TypeError: Cannot read property 'property' of null
undefined.property // TypeError: Cannot read property 'property' of undefined