оповещения (сэм); // возвращает неопределенное
Нет, это исключение.
Вы получаете 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 в других языках. Это не входит ни в одно из вышеперечисленных.