Когда JavaScript возвращает значение null и неопределенное?
-
21-09-2019 - |
Вопрос
Я использую JavaScript уже пару лет, и меня никогда не волновала разница между null
& undefined
раньше я всегда использовал undefined
для подтверждения существования объекта.
Но недавно я прошел через Эта статья.Здесь они сказали
JavaScript различает null, который представляет собой объект типа «object», который указывает на намеренное отсутствие значения, и undefine, который представляет собой объект типа «undef», который указывает на неинициализированное значение, то есть значение даже не было назначено еще.О переменных мы поговорим позже, но в JavaScript можно объявить переменную, не присваивая ей значения.Если вы это сделаете, тип переменной не определен.
Я теперь совсем запутался, что именно здесь неценно.Чем эта неценность отличается от undefined
.И при каких обстоятельствах JavaScript возвращает null
.
Я попробовал приведенный ниже образец
var sam;
alert(sam); // returns undefined
И
try {
//var sam;
alert(sam);
} catch(ex) { } // exception says: sam is undefined
И я не уверен, когда js возвращает нули.Может кто-нибудь прояснить мне.
Решение
оповещение (Сэм);// возвращает неопределенное значение
Нет, это исключение.
Вы получаете undefined
когда вы получаете доступ к неустановленному свойству;вы получите сообщение об ошибке, если напрямую используете неустановленное имя.
Глобальные переменные интересны тем, что к ним можно получить доступ либо с помощью простого имени переменной, либо с помощью свойств window
глобальный объект:
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // false
alert(sam); // ERROR
Если sam
объявлен, но не инициализирован, доступ window.sam
все еще тебя достает undefined
, но по другой причине:есть запись в window
объект для sam
, но это указывает на то же самое undefined
объект, который вы получаете при доступе к несуществующему свойству.
var sam;
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // ** true
alert(sam); // ** undefined
Это, конечно, запутанная кровавая путаница; undefined
— одна из худших ошибок при разработке языка JavaScript.
null
с другой стороны, это нормально и работает почти так же, как значения null/nil/void/None на других языках.Это не входит ни в одно из вышеперечисленных.
Другие советы
<script type="text/javascript">
// variable with an unasigned value
var a;
if (a == undefined) {
alert('a is undefined');
}
if (a == null) {
alert('a is undefined');
}
// this will produce an error
if (b == undefined) {
alert('b is undefined');
}
// this is the right way to handle not defined variables
if (typeof(c) == 'undefined') {
alert('c is blabla');
}
</script>
Чтобы переменная получила нулевое значение, ей необходимо присвоить. null
используется для обозначения неизвестного или неважного значения. undefined
с другой стороны, предназначено для указания того, что свойству, к которому осуществляется доступ, никогда не присваивалось значение.Это отличается от null
.
С null
один намеренно говорит: «Я еще не знаю, какое значение это должно иметь» или «Мне все равно, какое значение это имеет сейчас».OTH в undefined
на самом деле говорит: «Вы уверены, что вам следует использовать это значение, оно не было присвоено».
Я различаю их так: undefine означает «я не определил это значение» и null означает «я определил это значение, но не знаю или не могу понять, каким должно быть это значение».