И как бы вы проверили любое из этих состояний?

Начнем с необъявленного

Необъявленное не является зарезервированным словом JavaScript. Это означает, что мы не используем и не назначаем undeclared при написании кода, вместо этого мы сталкиваемся с сообщением об ошибке, которое появляется, когда мы пытаемся использовать необъявленную переменную.

aVariable;
console.log(aVariable) // ReferenceError: aVariable is not defined

Когда мы пытаемся использовать переменную, которая не была объявлена ​​с использованием одного из ключевых слов let или const, это использование приведет к приведенному выше сообщению об ошибке.

Как ни странно, это сообщение об ошибке раскрывает первый слегка сбивающий с толку сценарий, который мы рассматриваем сегодня: тип данных необъявленной переменной - undefined.

Что подводит нас к неопределенному

undefined - один из семи примитивных типов данных в JavaScript.

Согласно документации ECMAScript:

«Любая переменная, которой не было присвоено значение, имеет значение undefined».

Мы сталкиваемся с этим при использовании объявленной, но не определенной переменной. В таких ситуациях JavaScript присваивает нам значение. Это значение undefined:

let x; // here we are declaring x without defining it
console.log(x) // undefined

Неопределенная переменная, используемая в операторе или методе, вернет undefined:

let x;
addTwo = (x) => {2 + x} // undefined

И функция, которая не возвращает значение, также вернет undefined.

Мы также сталкиваемся с undefined при попытке получить доступ к несуществующему элементу массива и / или свойству объекта:

let arr = [1,2,3];
console.log(arr[6]) 
// undefined
var database = {};
console.log(database.names);
// undefined

В любом из этих сценариев переменных undefined - это значение и тип данных.

А что насчет null?

Еще раз процитируем документацию ECMAScript, null:

«Примитивное значение, которое представляет собой намеренное отсутствие какого-либо значения объекта».

Ключевое слово здесь намеренно. В то время как undefined может быть непреднамеренно назначен, если мы забудем определить переменную, JavaScript никогда не назначит null.

Как и undefined, null также примитивен, хотя, если вы проверите его тип:

typeof(null) // "object"

Вы получаете “object”. Это устаревшая ошибка JavaScript, которая не имеет отношения к этому обсуждению, но имейте в виду, что null является примитивным типом, а не объектом.

null - это значение, которое разработчики могут присвоить переменной, чтобы различать намеренно пустые значения и ошибки, возвращающие undefined.

Зачем это нужно? Пример из MDN:

«В API null часто извлекается там, где можно ожидать объект, но ни один объект не имеет значения».

Тестирование на null и undefined

И null, и undefined являются falsy значениями. Итак, простой способ создать проверку, которая будет улавливать любое значение, будет следующим (через Переполнение стека):

if( variable ) {
// do execute
} else {
 // don't execute
}

Будет оценено true, если переменная не undefined или null.

Однако будьте осторожны, null и undefined примерно равны, но не строго равны. Это потому, что проверка на свободное равенство приводит к falsy.

undefined == null // true
undefined === null // false
null !== undefined // true

Чтобы проверить, не определена ли переменная, вы можете сделать следующее:

typeof variable !== 'undefined' ? execute : don't execute

undefined - это отсутствие типа и ценности, а null - отсутствие ценности.

Обобщить

Нулевой

  • null назначен.
  • null всегда преднамеренно.
  • null указывает на отсутствие ценности.

Неопределенный

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

Оба

  • Оба null и undefined примитивы.
  • И null, и undefined - это falsy значения.
  • null и undefined примерно равны.

Спасибо за прочтение!