Я выбрал это из здесь
Неопределенное значение - это примитивное значение, используемое, когда переменная не имеет
было присвоено значение.
Нулевое значение - это примитивное значение, представляющее пустое значение
или несуществующая ссылка.
Когда вы объявляете переменную через var и не присваиваете ей значение, оно будет иметь неопределенное значение. Само по себе, если вы попытаетесь WScript.Echo () или alert () это значение, вы ничего не увидите. Однако, если вы добавите к нему пустую строку, то внезапно появится:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Вы можете объявить переменную, установить для нее значение null, и поведение будет идентичным, за исключением того, что вы увидите распечатку «null» вместо «undefined». Это небольшая разница.
Вы даже можете сравнить переменную, которая не определена, со значением NULL или наоборот, и условие будет выполнено:
undefined == null
null == undefined
Однако они считаются двумя различными типами. В то время как undefined является типом для себя самого, null считается значением специального объекта. Это можно увидеть с помощью typeof (), который возвращает строку, представляющую общий тип переменной:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
Запуск вышеуказанного скрипта приведет к следующему выводу:
undefined
object
Независимо от того, являются ли они разными типами, они будут действовать одинаково, если вы попытаетесь получить доступ к члену одного из них, например, то есть они бросят исключение. С WSH вы увидите страшное «varname» - ноль или не объект », и это если вам повезет (но это тема для другой статьи).
Вы можете явно установить переменную как неопределенную, но я настоятельно рекомендую это сделать. Я рекомендую только устанавливать переменные в null и оставлять неопределенными значение для вещей, которые вы забыли установить. В то же время я настоятельно рекомендую вам всегда устанавливать каждую переменную. JavaScript имеет цепочку областей видимости, отличную от цепочки языков C, легко запутывающую даже опытных программистов, и установка переменных в null - лучший способ предотвратить ошибки на его основе.
Еще один случай, когда вы увидите неопределенное всплывающее окно, - это использование оператора удаления. Те из нас, кто живет в С-мире, могут неправильно истолковывать это как уничтожение объекта, но это не так. Эта операция удаляет индекс из массива или элемент из объекта. Для массивов это не влияет на длину, а на то, что индекс теперь считается неопределенным.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
Результат приведенного выше сценария:
0.) a
1.) undefined
2.) c
Вы также получите неопределенное возвращаемое значение при чтении нижнего индекса или члена, который никогда не существовал.
Разница между null и undefined заключается в следующем: JavaScript никогда не установит ничего на null, обычно это то, что мы делаем. Хотя мы можем установить переменные на неопределенные, мы предпочитаем ноль, потому что это не то, что когда-либо делалось для нас. Когда вы отлаживаете, это означает, что все, что установлено на ноль, принадлежит вам, а не JavaScript. Кроме того, эти два специальных значения почти эквивалентны.