И как бы вы проверили любое из этих состояний?
Начнем с необъявленного
Необъявленное не является зарезервированным словом 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
примерно равны.
Спасибо за прочтение!