В JavaScript, если переменная была объявлена, но ей не было присвоено значение, ей автоматически присваивается значение undefined
. Поэтому, если вы попытаетесь отобразить значение такой переменной, будет отображаться слово «undefined». А null
— это специальное значение присваивания, которое может быть присвоено переменной как представление без значения.
Проще говоря, значение null
означает отсутствие значения, а undefined
означает переменную, которая была объявлена, но еще не имеет значения.
Чтобы проверить, является ли переменная undefined
или null
, вы можете использовать оператор равенства ==
или оператор строгого равенства ===
(также называемый оператором идентичности). Давайте посмотрим на следующий пример:
<script>
var firstName;
var lastName = null;
// Попробуйте получить несуществующий элемент DOM
var comment = document.getElementById('comment');
console.log(firstName); // Печатает: undefined
console.log(lastName); // Печатает: null
console.log(comment); // Печатает: null
console.log(typeof firstName); // Печатает: undefined
console.log(typeof lastName); // Печатает: object
console.log(typeof comment); // Печатает: object
console.log(null == undefined) // Печатает: true
console.log(null === undefined) // Печатает: false
/* Поскольку null == undefined истинно, следующие операторы будут перехватывать как null, так и undefined */
if(firstName == null){
alert('Variable "firstName" is undefined.');
}
if(lastName == null){
alert('Variable "lastName" is null.');
}
/* Поскольку null === undefined ложно, следующие операторы будут перехватывать только null или undefined */
if(typeof comment === 'undefined') {
alert('Variable "comment" is undefined.');
} else if(comment === null){
alert('Variable "comment" is null.');
}
</script>
Если вы попытаетесь проверить значения null
с помощью оператора typeof
, он не будет работать должным образом, потому что JavaScript возвращает «объект» для typeof null
вместо «null».
Это давняя ошибка в JavaScript, но поскольку много кода в сети написано вокруг этого поведения, и, таким образом, его исправление создало бы намного больше проблем, от идеи исправления этой проблемы отказался комитет, разрабатывающий и поддерживающий JavaScript.
Ключевое слово undefined
в JavaScript не является зарезервированным, поэтому можно объявить переменную с именем undefined
. Итак, правильный способ проверить неопределенную переменную или свойство — использовать оператор typeof
, например: if(typeof myVar === 'undefined')
.