How to Check if a JavaScript Variable is Undefined
In JavaScript, checking if a variable is undefined can be a bit tricky since a null variable can pass a check for undefined if not written properly. As a result, this allows for undefined values to slip through and vice versa. Make sure you use strict equality === to check if a value is equal to undefined .
Another alternative is checking if typeof x === 'undefined' . The biggest difference between these two approaches is that, if x has not been declared, x === undefined throws a ReferenceError , but typeof does not.
When using x === undefined , JavaScript checks if x is a declared variable that is strictly equal to undefined . If you want to check if x is strictly equal to undefined regardless of whether is has been declared or not, you should use typeof x === 'undefined' .
However, typeof x may still throw an error if you later declare x using let or const :
Checking Whether Object Properties are Undefined
Checking whether an object property is undefined is subtle, because if you access a property that doesn't exist in the object, JavaScript will report the property's value as undefined rather than throw a ReferenceError .
undefined
Значение глобального свойства undefined представляет значение undefined . Это одно из примитивных значений JavaScript.
| Атрибуты свойства undefined | |
|---|---|
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | нет |
Интерактивный пример
Синтаксис
Описание
undefined является свойством глобального объекта, то есть, это переменная в глобальной области видимости. Начальным значением undefined является примитивное значение undefined .
В современных браузерах (JavaScript 1.8.5 / Firefox 4+), undefined является ненастраиваемым и незаписываемым свойством, в соответствии со спецификацией ECMAScript 5. Даже когда это не так, избегайте его переопределения.
Переменная, не имеющая присвоенного значения, обладает типом undefined . Также undefined возвращают метод или инструкция, если переменная, участвующая в вычислениях, не имеет присвоенного значения. Функция возвращает undefined , если она не возвращает какого-либо значения.
Поскольку undefined не является зарезервированным словом (en-US), он может использоваться в качестве идентификатора (имени переменной) в любой области видимости, за исключением глобальной.
Примеры
Пример: строгое сравнение и undefined
Вы можете использовать undefined и операторы строгого равенства или неравенства для определения того, имеет ли переменная значение. В следующем коде переменная x не определена и инструкция if вычисляется в true .
Обратите внимание: здесь используется оператор строгого равенства (идентичности) вместо простого оператора равенства, поскольку x == undefined также проверяет, является ли x равным null , в то время как оператор идентичности этого не делает. null не эквивалентен undefined . Для более подробной информации смотрите операторы сравнения (en-US).
Пример: оператор typeof и undefined
В качестве альтернативы можно использовать оператор typeof :
Одной из причин использования оператора typeof может быть та, что он не выбрасывает ошибку, если переменная не была определена.
Однако, уловки такого рода должны избегаться. JavaScript является языком со статической областью видимости, так что узнать, была ли переменная определена, можно путём просмотра, была ли она определена в охватывающем контексте. Единственным исключением являет глобальная область видимости, но глобальная область видимости привязана к глобальному объекту, так что проверка существования переменной в глобальном контексте может быть осуществлена путём проверки существования свойства глобального объекта (например, используя оператор in ).
JavaScript: проверка, является ли переменная неопределенной или нулевой
undefined а null все время прокрадываются в поток кода. Независимо от того, теряем ли мы ссылку из-за побочных эффектов, забываем назначить ссылочную переменную объекту в памяти или получаем пустой ответ от другого ресурса, базы данных или API – нам постоянно приходится иметь дело со значениями undefined и null в JavaScript.
В этом кратком руководстве мы рассмотрим, как проверить, есть ли переменная undefined или null в JavaScript.
Разница между undefined и null
undefined и null переменные часто идут рука об руку, а некоторые используют эти термины как синонимы. Хотя между ними есть разница:
- undefined – это переменная, которая относится к чему-то, чего не существует, и переменная не определена как что-либо.
- null – это переменная, которая определена, но не имеет значения.
Разница между ними, возможно, более ясна через код:
a undefined – он ни к чему не привязан, и нет четкого определения того, что это такое на самом деле. b будет определен как нулевое значение .
Было ли b это прямо определено null или определено как возвращаемое значение функции (которая просто возвращает null значение) не имеет значения – это определено как что-то .
С другой стороны, a это буквально ничего . Никакого задания не было, и совершенно неясно, что оно должно или могло бы быть.
На практике большая часть null и undefined значения возникают из человеческих ошибок при программировании, и эти два идут вместе в большинстве случаев. Проверяя одно – мы обычно проверяем и другое.
Проверка, является ли переменная неопределенной или нулевой
Есть два подхода, которые вы можете выбрать при проверке наличия переменной undefined или null в JavaScript.
Операторы == и ===
Есть разница между оператором свободного равенства ( == ) и оператором строгого равенства ( === ) в JavaScript. Свободное равенство может привести к неожиданным результатам и в этом контексте ведет себя иначе, чем оператор строгого равенства:
Примечание: это не следует рассматривать как доказательство того, что null и undefined являются одним и тем же. Оператор свободного равенства использует “разговорные” определения истинных / ложных значений. 0 , «» и [] оцениваются, поскольку false они обозначают отсутствие данных, хотя на самом деле они не равны логическому.
При этом – поскольку оператор свободного равенства рассматривает null и undefined как одно и то же – вы можете использовать его как сокращенную версию проверки для обоих:
Это проверит, a есть ли null или undefined . Так a как undefined это приводит к:
Хотя мы действительно не знаем, что это такое. Если бы мы использовали строгий оператор, который проверяет, a является ли он null , мы были бы неприятно удивлены, встретив undefined значение в console.log() операторе:
a на самом деле не является null , но есть undefined . В этом случае мы хотели бы проверить их отдельно, но при этом иметь возможность знать настоящую причину потока:
Здесь мы объединили их вместе с помощью исключающего ИЛИ – хотя вы также можете разделить их для разных операций восстановления, если хотите:
Примечание: стоит отметить, что если ссылка не существует, ReferenceError будет выброшено. Этого можно избежать, используя typeof оператор, хотя с точки зрения разработки кода это может быть не лучший выбор. Если вы используете несуществующую ссылочную переменную – молчаливое игнорирование этой проблемы с помощью использования typeof может привести к тихому отказу в дальнейшем.
typeof Оператор
typeof Оператор дополнительно может быть использован вместе с === оператором , чтобы проверить , если тип переменной равна ‘undefined’ или ‘null’ :
Однако стоит отметить, что если вы забросите несуществующую ссылочную переменную – typeof с радостью поработает с ней, рассматривая ее как undefined :
Этот код также приводит к:
С технической точки зрения, some_var является неопределенной переменной, так как она не имеет никакого назначения. С другой стороны, это может typeof незаметно привести к сбою и сигнализировать о том, что входящее значение может иметь проблему, вместо того, чтобы вызывать ошибку, которая дает понять, что вы имеете дело с несуществующей переменной.
Например – представьте , что вы сделали опечатку, и случайно ввели somevariable вместо someVariable в if предложении:
Здесь мы пытаемся проверить, someVariable есть ли это null или undefined . Однако из-за опечатки somevariable вместо этого проверяется, и результат:
В более сложном сценарии обнаружить эту опечатку будет сложнее, чем в этом. У нас был тихий провал, и мы можем потратить время на ложный след. С другой стороны, используя только == и === операторы здесь бы уже предупредил нас о несуществующей ссылочной переменной:
Этот код приводит к:
Примечание: это не означает, что typeof это по своей сути плохой выбор, но он также влечет за собой последствия.
Использование Lodash для проверки того, имеет ли переменная значение null , undefined или nil
Наконец, вы можете выбрать внешние библиотеки помимо встроенных операторов. Хотя импорт внешней библиотеки не оправдан только для выполнения этой проверки – в этом случае вам будет лучше просто использовать операторы.
Однако Lodash уже присутствует во многих проектах – это широко используемая библиотека, и когда она уже присутствует, нет потери эффективности при использовании нескольких методов, которые она предоставляет. В частности, Lodash предлагает несколько полезных методов, которые проверяют, имеет ли переменная значение null , undefined или nil .
Установить и импортировать Lodash
Вы можете импортировать Lodash через CDN:
Импортируйте его локально из .js файла:
Или установите через NPM:
Кроме того, его можно импортировать как модуль ES6 или импортировать с помощью require() синтаксиса:
Примечание: это соглашение называть экземпляр Lodash _ , подразумеваемое именем, хотя не обязательно.
Теперь мы можем использовать библиотеку , чтобы проверить , является ли переменная null , undefined или nil – где ноль обозначает оба предыдущих двух напастей. Его можно использовать как сокращенную версию для проверки обоих:
Заключение
В этом кратком руководстве мы рассмотрели , как проверить , если переменная равна нулю, undefined или null в JavaScript, используя == , === и typeof оператор, отметив плюсы и минусы каждого подхода. Наконец, мы кратко рассмотрели использование Lodash – популярной удобной служебной библиотеки для выполнения тех же проверок.