Когда JavaScript возвращает null & undefined?

Я использовал JavaScript уже пару лет и никогда не интересовался разницей между null и undefined раньше, я всегда использую undefined для проверки существования объекта.

Но недавно я пришел через в эту статью. Здесь они сказали

JavaScript различает нуль, который является объектом типа "объект", который указывает на преднамеренное не значение, и undefined, который является объектом типа "undefined", который указывает неинициализированное значение, значение еще не было присвоено. Мы поговорим о переменных позже, но в JavaScript можно объявить переменную без присвоения ей значения. Если вы это сделаете, тип переменной undefined.

Теперь я совершенно смущен, что здесь нецензурно. Как это значение не отличается от undefined. И каковы обстоятельства, возвращаемые javascript null.

Я попробовал приведенный ниже пример

var sam;
alert(sam);  // returns undefined

и

try {
    //var sam;
    alert(sam);  
} catch(ex) { }   // exception says: sam is undefined

И я не уверен, когда js возвращает нули. Может кто-то уточнить меня.

Ответы

Ответ 1

оповещения (SAM);//возвращает undefined

Нет, это исключение.

Вы получаете undefined при доступе к неустановленному свойству; вы получаете сообщение об ошибке при непосредственном использовании имени unset.

Глобальные переменные интересны тем, что к ним можно получить доступ либо с использованием простого имени переменной, либо с помощью свойств глобального объекта 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 на других языках. Это не входит ни в один из вышеперечисленных.

Ответ 2

<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>

Ответ 3

Чтобы переменная принимала нулевое значение, она должна быть назначена. null используется для указания неизвестного значения или значения, которое не имеет значения. undefined, с другой стороны, предназначен для указания того, что доступ к ресурсу никогда не назначал значение. Это отличается от null.

С null человек сознательно говорит: "Я не знаю, какое значение это должно иметь" или "Мне все равно, какое значение это сейчас". OTH в undefined действительно говорит: "Вы уверены, что должны использовать это значение, которое ему не назначено".

Ответ 4

То, как я их различаю, - это undefined "Я не определил это значение", а null - "Я определил это значение, но я не знаю или не могу понять, какое значение должно быть".