2014-09-28 3 views
-5

Существует много дискуссий о том, что null в JavaScript на самом деле есть. Например, Why is null an object and what's the difference between null and undefined?.Является ли пустой регулярный примитив в JavaScript?

MDN списки null среди примитивных ценностей и заявляет, что:

специальное ключевое слово, обозначающее нулевое значение; нуль также примитивный значение

(выше выделено мной)

Моя последняя ссылка будет Programming JavaScript Applications книги Эрика Эллиота, который в своем Chapter 3. Objects говорит следующее:

В JavaScript, ... даже примитивные типы получить обработку объекта, когда вы ссылаетесь на них со свойством доступа. Они автоматически включаются в объект , который вы можете назвать их прототипом.

Примитивные типы ведут себя как объекты, когда вы используете обозначения доступа к свойствам, но вы не можете назначать им новые свойства. Примитивы временно обернут объектом, а затем этот объект сразу же выброшен. Любая попытка присвоения значений свойствам окажется успешной, но последующие попытки получить доступ к этому новому объекту не удастся.

И действительно следующие операторы будут выполняться без проблем:

"1".value = 1; 
(1).value = "1"; 
false.value = "FALSE"; 

в то время как его один

null.value = "Cannot set property of null"; 

бросает Uncaught TypeError. См. JS Fiddle.

Так, по крайней мере, в этом отношении null ведет себя иначе, чем другие примитивы.

Является null считается обычный примитивный в JavaScript?

+2

Когда вы пытаетесь получить доступ к свойствам других примитивов, они прозрачно завертываются в объекты, чтобы их можно было связать с их прототипами, и поэтому ошибок нет. 'null' и' undefined' не имеют прототипов, поэтому этого не происходит, следовательно, ошибка. –

+2

Я бы не взял вещи из книг в качестве главы и стиха. Например, сказать: «... пары ключ/значение ... действительно являются объектами» просто неверно. Я предполагаю, что он хотел сказать «коллекцию ключей/ценностей» (ака хэшей), но это просто говорит о небрежности в этой и многих других книгах. – 2014-09-28 16:54:27

+0

@torazaburo - эта часть несущественна для моего предмета. В любом случае мой Fiddle полностью демонстрирует то, что я делал. –

ответ

3

Да, это настоящий примитив.

Исключениями для доступа к собственности являются null и undefined, так как они не имеют типа обертки, такие как строки, булевы и числа.

ECMAScript 5, Section 4.3.2примитивным значение

членом одного из типов не определено, Null, Boolean, Number или Строка , как это определено в пункте 8.

ПРИМЕЧАНИЕ. Первоначальное значение представляет собой базовое значение, которое представлено непосредственно на уровне самого низкого уровня реализации языка.

+0

Что еще недоставало 'null' и' undefined' в сравнении с другими примитивами? –

+0

Ничего особенного. Я имею в виду, что некоторые виды поведения здесь и там будут отличаться, но они в основном основаны на характере их типа. Одно из отличий заключается в том, что если вы передадите «null» или «undefined» в качестве первого аргумента в '.call()' или '.apply()', объект 'window' будет использоваться как значение' this', тогда как любой другой примитив будет представлен его оберткой объекта. Разумеется, причина в том, что у них просто нет обертки объекта. * (Это относится к коду нестрогового режима. Строгий режим будет использовать фактическое примитивное значение как 'this'.) * – 2014-09-28 17:12:59

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