2013-12-12 4 views
2

В javascript typeof null == "object" - true. Но null instanceOf Объект false. я был смущен об этом, пока я не прочитал в профессиональной JavaScript для веб-разработчиков, которые,Понимание примитивных типов данных в JavaScript

если InstanceOf используется с примитивным значением, он всегда будет возвращать FALSE, потому что примитивы не являются объектами.

Почему, если примитивные типы данных не являются объектами, будет ли typeof null == "object" be true?

ответ

2

Оператор typeof является изворотливым, в основном. Here is the documentation in the spec. Из этой таблицы вы можете видеть, что оператор просто определен таким образом, что результатом typeof null является «объект».

В JavaScript null действительно в своем собственном виде. Это особый примитивный тип.

JavaScript-примитивные типы действительно не объекты. Иногда они кажутся объектами, потому что семантика языка (в частности, семантика операторов . и [ ]) такова, что примитивы автоматически «помещаются» в объекты с соответствующим типом. Это верно для булевых, числовых и строковых примитивов. Для null такого типа объекта не существует.

Из-за того,

var len = "some string".length; 

работает, даже если строка примитивы не имеют свойство «длина».

Еще одна вещь: использовать функцию «toString» в прототипе объекта как нечто вроде «улучшенной» версии typeof.

alert(Object.prototype.toString.call(null)); // [object Null] 

Строка, что функция возвращает не являются наиболее удобными вещами, чтобы иметь дело с, но они обеспечивают немного более тонкую детализацию, чем typeof.

+0

Удовлетворительный факт - 'typeof null' является _mistake_, у них был эксперимент, чтобы исправить его некоторое время назад, и это не сработало, потому что слишком много мест полагалось на текущее поведение. –

+0

@BenjaminGruenbaum ну это, безусловно, кажется ошибкой :) – Pointy

Смежные вопросы