"JavaScript: Проверка на null и undefined, а также разница между == и ==="
Как я могу проверить, является ли переменная
null
илиundefined
, и в чем разница междуnull
иundefined
?В чем разница между операторами
==
и===
(трудно найти информацию в Google по запросу "===")?
5 ответ(ов)
Разница между undefined
и null
в JavaScript может показаться незначительной, но она важна.
Переменная undefined
— это переменная, которая либо никогда не была объявлена, либо была объявлена, но не инициализирована. Например, если вы объявите var a;
, то a
будет undefined
, потому что ей не было присвоено ни одно значение.
Если затем вы присвоите переменной a
значение null
, то теперь a
станет равной null
. В JavaScript null
является объектом (попробуйте выполнить typeof null
в консоли JavaScript, если не верите), что означает, что null
— это значение (на самом деле, даже undefined
является значением).
Пример:
var a;
typeof a; // => "undefined"
a = null;
typeof null; // => "object"
Это может быть полезно при передаче аргументов в функции. Вы можете захотеть установить значение по умолчанию, но считаете null
допустимым значением. В этом случае вы можете сделать следующее:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// что-то делаем
}
Если вы опустите параметр optional
, вызвав doSomething(1, 2)
, то optional
будет равно строке "three"
, а если вы передадите doSomething(1, 2, null)
, то optional
будет равно null
.
Что касается операторов сравнения ==
и строгое равенство ===
, то первый из них является слабым (переделывает), в то время как строгое равенство также проверяет тип значений. Это означает, что 0 == "0"
вернет true
, в то время как 0 === "0"
вернет false
, потому что число — это не строка.
Вы можете использовать эти операторы для проверки между undefined
и null
. Например:
null === null // => true
undefined === undefined // => true
undefined === null // => false
undefined == null // => true
Последний случай интересен, потому что позволяет проверять, является ли переменная либо undefined
, либо null
и ничего другого:
function test(val) {
return val == null;
}
test(null); // => true
test(undefined); // => true
Чтобы проверить, является ли переменная null или undefined, вы можете просто проверить, имеет ли переменная валидное значение следующим образом:
if (variable) {
Этот код вернёт true
, если переменная не содержит:
- null
- undefined
- 0
- false
- "" (пустую строку)
- NaN
Таким образом, в условии будут выполнены все проверки на ложные значения. Если вам нужно проверить только на null и undefined, вы можете использовать более явное условие:
if (variable !== null && variable !== undefined) {
Это позволит вам более точно контролировать, что именно вы проверяете.
Неопределённое значение (undefined)
Это означает, что переменная ещё не инициализирована.
Пример:
var x;
if (x) { // таким образом можно сделать проверку
// код.
}
Сравнение (==)
Такое сравнение проверяет только равенство значений, не учитывая типы данных.
Пример:
var x = true;
var y = new Boolean(true);
x == y; // возвращает true
Поскольку проверяется только значение.
Строгое сравнение (===)
Это сравнение проверяет как значение, так и тип данных.
Пример:
var x = true;
var y = new Boolean(true);
x === y; // возвращает false
В данном случае проверяется, что тип данных x — примитивный, а y — объект типа Boolean.
Если ваша (логическая) проверка касается отрицания (!) и вы хотите захватить как null
, так и undefined
в JavaScript (поскольку разные браузеры могут выдавать разные результаты), вам следует использовать менее строгое сравнение. Например:
var ItemID = Item.get_id();
if (ItemID != null)
{
// выполняем действия
}
Такой код захватит как null
, так и undefined
, так как нестрогое сравнение (!=
) проверяет значение на равенство без учета типа.
При использовании различных логик для проверки значений в JavaScript, вы можете применять следующий код для проверки всех четырех условий валидации: не null, не пустое (blank), не undefined и не ноль. Для этой проверки достаточно использовать конструкцию !(!(variable))
.
Вот пример кода:
function myFunction() {
var data; // Значения могут быть null, пустыми, undefined или нулем, вы можете протестировать это
if (!(!(data))) {
// Если data содержит допустимое значение
alert("data " + data);
} else {
// Если data является null, пустым, undefined или нулем и т.д.
alert("data is " + data);
}
}
Этот код позволяет легко определить, имеет ли переменная data
корректное значение. Если переменная содержит недопустимое значение, то вы получите соответствующее сообщение о том, что данные невалидны.
Существует ли стандартная функция для проверки переменных на null, undefined или пустые значения в JavaScript?
Как определить, является ли переменная 'undefined' или 'null'?
Почему null является объектом и в чем разница между null и undefined?
Проверка существования переменной в JavaScript (определена/инициализирована)
Как проверить неопределённую переменную в JavaScript