Когда JavaScript возвращает значение null & undefined? - PullRequest
17 голосов
/ 13 октября 2009

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

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

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

Я сейчас совершенно сбит с толку, что именно здесь не имеет значения. Чем эта не-ценность отличается от undefined. И какие обстоятельства javascript возвращает null.

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

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

И

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

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

Ответы [ 4 ]

14 голосов
/ 13 октября 2009

оповещения (сэм); // возвращает неопределенное

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

Вы получаете 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 в других языках. Это не входит ни в одно из вышеперечисленных.

2 голосов
/ 13 октября 2009

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

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

2 голосов
/ 13 октября 2009
<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>
1 голос
/ 13 октября 2009

Способ, которым я различаю их, не определен, так как «я не определил это значение», а ноль - «Я определил это значение, но я не знаю или не могу понять, каким должно быть это значение».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...