В JavaScript у нас есть нечто, называемое неопределенным . Я сказал что-то, потому что я действительно не знаю, является ли это базовым классом, или встроенной переменной, или ключевым словом, или чем-то еще. Я просто знаю, что это там.
Чтобы увидеть это в действии, вы можете просто написать:
undefined;
typeof undefined;
Может кто-нибудь объяснить мне, почему эта вещь была вставлена в JavaScript? У нас есть null
ценность в этом языке, поэтому это не должно быть что-то вроде null
. В других языках, когда мы не знаем значение свойства или переменной, мы просто устанавливаем его в null. Здесь мы можем сделать то же самое.
Как мы можем использовать эту вещь в JavaScript?
javascript
language-design
Саид Нямати
источник
источник
undefined
и когда использоватьnull
Ответы:
Есть две вещи, которые вы должны понимать о неопределенных ...
undefined
, который может иметь только одно значение .undefined
Теперь внимательно прочитайте следующее ...
Существует так много значений типа
number
(10, 10.01, 1e1). Но может быть только одно значение типаundefined
, и это значение сохраняется в переменнойundefined
. Это значение имеет никакого буквальное представление - например, числовые значения1
,100
,1e-1
все литералы номера типа, но значение , сохраненное в переменномundefined
не имеет буквальную формы.undefined
переменная, просто обычная переменная, которую JavaScript объявляет и присваивает ей значение типаundefined
в глобальной области видимости. Таким образом, вы можете сделать все следующее ...undefined
, вы можете сгенерировать значение типаundefined
с помощью выраженияvoid 0
- единственная цель которого - вернуть значение типаundefined
.NO. Так же, как никто не может объяснить, почему необъявленные переменные переходят в глобальную область вместо локальной. Вам просто нужно научиться разумно использовать его, а не пытаться найти оправдания его существованию.
Хотя
null
может делать вещиundefined
, это более или менее связано,objects
а не скаляры. Действительно, JavaScript считаетnull
себя объектом -typeof null
возвращает «объект».По моему мнению, суть в том, чтобы НЕ пытаться рассуждать об абсолютных целях
undefined
иnull
- и использовать их в вашем коде разумно, чтобы ваш код был читабельным, обслуживаемым и повторно используемым.источник
the bottom line is to NOT try to reason the absolute purposes of undefined and null
Похоже, что JavaScript немного сложнее, чем логический язык, и мы просто должны привыкнуть к нему, как экспериментировать в новом мире.undefined
". Фактическиvoid
оценивает выражение, игнорирует возвращаемое значение и возвращаетundefined
значение. Что касается различий.undefined
используется движком JS, чтобы сказать, что эта вещь не имеет значения.null
используется вами, чтобы сказать, что эта вещь не имеет значения. Есть четкое различие.undefined = 100; typeof undefined;
возвращает «undefined» для меня, если вы пытаетесь присвоить ноль, вы получаете ошибку. Просто хотел уточнить это для будущих читателей.Извините за ответ на более старый вопрос, но причина, по которой вам нужны как неопределенные, так и нулевые значения, проста: в языке типизации утки на основе прототипа вы должны обязательно различать «этот объект не определяет значение для X» и «этот объект говорит, что X ничего / нуль / пусто».
Без этой возможности невозможно обойти цепочку прототипов, и поэтому наследование не может работать; Вы должны быть в состоянии определить, что obj.someProp не определен, чтобы вы могли смотреть на obj.prototype.someProp и далее вверх по цепочке, пока не найдете значение. Если obj.someProp вернул null, не было бы способа узнать, действительно ли он нулевой или просто означал «посмотрите на мой прототип». Единственный способ обойти это - добавить закулисную магию за кулисы, которая лишает вас способности размышлять с цепями прототипов и делать различные другие элементы черной магии JS.
Как и большая часть Javascript, идея undefined и null сначала кажется вонючей и глупой, а потом абсолютно блестящей (затем снова вонючей и глупой, но с разумным объяснением).
Такой язык, как C #, не будет компилироваться, если вы получите доступ к несуществующему свойству, а другие динамические языки часто выдают исключения во время выполнения, когда вы прикасаетесь к несуществующему свойству, что означает, что вы должны использовать специальные конструкции для их проверки. Плюс классы означают, что когда объект создается, вы уже знаете его цепочку наследования и все свойства, которыми он обладает - в JS я могу изменить прототип на 15 шагов вверх по цепочке, и эти изменения появятся в существующих объектах.
источник
Существует глобальная переменная
undefined
, для которой установлено неопределенное значение. Злые люди могут настроить это на что-то другое, поэтому, вероятно, лучше не доверять этому.typeof undeclaredVariable == 'undefined'
. Попытка прочитать значение недоопределенной переменной приведет к ошибкеReferenceError
.)null
тонко нарушена, потому чтоtypeof null == 'object'
. Я не знаю, почему у насundefined
иnull
, возможно, какая-то историческая авария.источник
Ну,
undefined
это дозорное значение, полученное путем оценки чего-то, что не определено в противоположностьnull
, которое является значением, точно определенным, чтобы ничего не представлять .Так, например, возвращаемое значение функции, которая не определяет возвращаемое значение, не определено. Значение свойства, не определенного в объекте, не определено. Возвращаемое значение оператора, который не является выражением, не определено (хотя вы не увидите этого, кроме как в консоли).
Обратите внимание, что вы можете создать функцию, которая возвращает явно,
undefined
и вы можете явно определить свойство со значениемundefined
объекта, потому что, в конце концов, это допустимое значение. Вы бы сделали это для того, чтобы явно сообщить, что что-то не определено .Можно подумать о взаимосвязи
undefined
и ,null
как междуNaN
и0
.источник
undefined
этоvoid
?void
в JavaScript это унарный оператор , который принимает любой аргумент и возвращает значениеundefined
.