Что немного странно, так это то, что на языке JavaScript на самом деле есть два значения, которые представляют «не»: неопределенные и нулевые. почему это?
1. Сходство
В JavaScript присвоение переменной неопределенной или нулевой, честно говоря, почти без разницы.
Кода -копия выглядит следующим образом:
var a = не определен;
var a = null;
В приведенном выше коде переменная A назначается неопределенным и нулевым соответственно, и эти два метода написания практически эквивалентны.
Неопределенные и нулевые автоматически преобразуются в FALSE в операторе IF, и оператор равенства даже напрямую сообщает, что эти два равны.
Кода -копия выглядит следующим образом:
if (! Не определено)
console.log («неопределенное является ложным»);
// не определено ложное
if (! null)
console.log ('null false');
// null ложный
Неопределенный == NULL
// истинный
Приведенный выше код показывает, насколько похожи поведение двух!
Поскольку значение и использование неопределенного и нулевого аналогичны, зачем вам одновременно установить два таких значения? Дарт, альтернатива JavaScript Google, явно предусматривает, что есть только нулевая и не является неопределенным!
2. Исторические причины
Недавно, когда я читал новую книгу «Говоря об javascript», я случайно обнаружил ответ на этот вопрос!
Оказывается, это связано с историей JavaScript. Когда JavaScript родился в 1995 году, он был изначально установлен как Java, только NULL был установлен как значение, указывающее «нет».
Согласно традиции языка C, NULL предназначен для автоматического превращения в 0.
Кода -копия выглядит следующим образом:
Число (null)
// 0
5 + null
// 5
Тем не менее, дизайнер JavaScript Брендан Эйх считает, что этого недостаточно по двум причинам.
Во -первых, NULL рассматривается как объект, как на Java.
Кода -копия выглядит следующим образом:
тип нуля
// "объект"
Тем не менее, типы данных JavaScript разделены на две категории: примитивные и синтетические типы (комплекс).
Во -вторых, начальная версия JavaScript не включала механизм обработки ошибок. Брендан Эйх считает, что если NULL автоматически превращается в 0, нелегко найти ошибки.
Поэтому Брендан Эйх спроектировал еще одну неопределенную.
3. Первоначальный дизайн
Оригинальная версия JavaScript отличала его: NULL - это объект, который представляет «нет», который равен 0 при преобразовании в числовое значение; Полем
Кода -копия выглядит следующим образом:
Число (неопределенное)
// НАН
5 + не определен
// НАН
4. Текущее использование
Тем не менее, вышеупомянутое различие было быстро доказано невозможным на практике. В настоящее время нулевые и неопределенные являются в основном синонимичны только с некоторыми небольшими различиями.
NULL означает «нет объекта», то есть там не должно быть значения. Типичное использование:
(1) В качестве параметра функции параметр функции не является объектом.
(2) как конечная точка цепочки прототипа объекта.
Кода -копия выглядит следующим образом:
Object.getPrototypeof (object.prototype)
// нулевой
Неопределенное означает «отсутствующее значение», что означает, что здесь должно быть значение, но оно еще не определено. Типичное использование:
(1) Когда переменная объявлена, но не имеет назначения, она эквивалентна неопределенной.
(2) При вызове функции предоставляется параметр, который не должен быть предоставлен, а параметр равен неопределенному.
(3) У объекта нет атрибута, присвоенного значению, а значение атрибута не определен.
(4) Когда функция не возвращает значение, неопределенное возвращается по умолчанию.
Кода -копия выглядит следующим образом:
var i;
я // не определен
Функция f (x) {console.log (x)}
f () // неопределенное
var o = new Object ();
OP // неопределенная
var x = f ();
x // неопределен