Проверка JavaScript на null vs. undefined и разница между == и ===
Как проверить переменную, если она null
или undefined
и в чем разница между null
и undefined
?
В чем разница между ==
и ===
(сложно найти в Google "===")?
Ответы
Ответ 1
Как проверить переменную, если она null
или undefined
...
Является ли переменная null
:
if (a === null)
// or
if (a == null) // but see note below
... но обратите внимание, что последнее также будет истинным, если a
- undefined
.
Это undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
... но опять же, обратите внимание, что последний туманный; это также верно, если a
- null
.
Теперь, несмотря на вышеописанное, обычный способ проверить, что это означает, что они ложны:
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Это определено ToBoolean в спецификации.
... и в чем разница между null
и undefined
?
Они оба значения обычно используются, чтобы указать на отсутствие чего-то. undefined
является более общим, используется как значение по умолчанию для переменных, пока не будет присвоено какое-либо другое значение, как значение аргументов функции, которые не были указаны при вызове функции, и как значение, которое вы получаете, когда вы попросите объект для свойства, которого у него нет. Но он также может быть явно использован во всех этих ситуациях. (Существует разница между объектом, не имеющим свойства, и обладающим свойством со значением undefined
; существует разница между вызовом функции со значением undefined
для аргумента и оставлением этого аргумента полностью.)
null
немного более определен, чем undefined
: это пустая ссылка на объект. Разумеется, JavaScript явно напечатан, но не все вещи, с которыми взаимодействует JavaScript, свободно набираются. Если API, подобный DOM в браузерах, нуждается в ссылке на объект, пустой, мы используем null
, а не undefined
. И аналогично, операция DOM getElementById
возвращает ссылку на объект — либо действительный (если он нашел элемент DOM), либо null
(если это не так).
Интересно (или нет), это их собственные типы. То есть null
- единственное значение в типе Null, а undefined
- единственное значение в типе Undefined.
В чем разница между "==" и "==="
Единственное различие между ними заключается в том, что ==
будет выполнять принуждение типа, чтобы попытаться совместить значения, а ===
- нет. Так, например, "1" == 1
истинно, потому что "1"
приближается к 1
. Но "1" === 1
является ложным, потому что типы не совпадают. ("1" !== 1
истинно.) Первый (реальный) шаг ===
: "Являются ли типы операндов одинаковыми?" и если ответ "нет", результатом будет false
. Если типы совпадают, это делает именно то, что делает ==
.
Тип принуждения использует довольно сложные правила и может иметь неожиданные результаты (например, "" == 0
истинно).
Больше в спецификации:
Ответ 2
Разница тонкая.
В 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";
}
// do something
}
Если вы опустите параметр optional
doSomething(1, 2) then
optional, будет строка "three"
, но если вы пройдете doSomething(1, 2, null)
, то необязательным будет null
.
Что касается равных ==
и строго равных ===
компараторов, первый - слабо тип, а строго равный, также проверяет тип значений. Это означает, что 0 == "0"
вернет true; а 0 === "0"
вернет false, потому что число не является строкой.
Вы можете использовать эти операторы для проверки между undefined
a null
. Например:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
Последний случай интересен, потому что он позволяет вам проверить, является ли переменная либо undefined, либо нулем, и ничего больше:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
Ответ 3
Спектр - это место, где можно получить полные ответы на эти вопросы. Здесь резюме:
- Для переменной
x
вы можете:
- проверьте, имеет ли он
null
путем прямого сравнения с помощью ===
. Пример: x === null
- проверить, является ли это
undefined
одним из двух основных методов: прямое сравнение с undefined
или typeof
. Для разных причин, я предпочитаю typeof x === "undefined"
.
- проверьте, является ли это одним из
null
и undefined
, используя ==
и полагаясь на правила принуждения с незначительным таинственным типом, которые означают x == null
, делает именно то, что вы хотите.
- Основное различие между
==
и ===
заключается в том, что если операнды имеют разные типы, ===
всегда будет возвращать false
, а ==
преобразует один или оба операнда в один и тот же тип, используя правила, которые приводят к некоторому слегка неинтуитивному поведению. Если операнды имеют один и тот же тип (например, обе строки, например, в приведенном выше сравнении typeof
), ==
и ===
будут вести себя точно так же.
Дополнительная информация:
Ответ 4
undefined
Это означает, что переменная еще не установлена.
Пример:
var x;
if(x){ //you can check like this
//code.
}
равно (==)
Только проверочное значение равно не типу данных.
Пример:
var x = true;
var y = new Boolean(true);
x == y ; //returns true
Потому что он проверяет только значение.
Строгие равные (===)
Проверяет, что значение и тип данных должны быть одинаковыми.
Пример:
var x = true;
var y = new Boolean(true);
x===y; //returns false.
Поскольку он проверяет тип данных x является примитивным типом, а y является булевым объектом.
Ответ 5
Как проверить переменную, если она равна null или undefined
просто проверьте, имеет ли переменная допустимое значение:
if(variable)
он вернет true, если переменная не содержит:
- NULL
- undefined
- 0
- ложь
- "" (пустая строка)
- NaN
Ответ 6
Объявление 1. null
не является идентификатором свойства глобального объекта, как undefined
может быть
let x; // undefined
let y=null; // null
let z=3; // has value
// 'w' // is undeclared
if(!x) console.log('x is null or undefined');
if(!y) console.log('y is null or undefined');
if(!z) console.log('z is null or undefined');
try { if(w) 0 } catch(e) { console.log('w is undeclared') }
// typeof not throw exception for undelared variabels
if(typeof w === 'undefined') console.log('w is undefined');
Ответ 7
Если ваша (логическая) проверка предназначена для отрицания (!), И вы хотите захватить как JS null
и undefined
(поскольку разные браузеры предоставят вам разные результаты), вы будете использовать менее ограничительное сравнение: например:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
Это фиксирует как null
и undefined
Ответ 8
Вы можете использовать приведенный ниже код для проверки всех четырех (4) условий для проверки, например, не ноль, не пустой, не неопределенный и не ноль, используйте только этот код (! (! (Variable))) только в javascript и jquery.
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
//If data has valid value
alert("data "+data);
}
else
{
//If data has null, blank, undefined, zero etc.
alert("data is "+data);
}
}
Ответ 9
Если вы хотите проверить null
или undefined
, но не полагаться на простоту фальшивости, вы также можете использовать этот многоразовый компонент is-nil, который определяет, является ли ссылка val
нулевой или undefined.
Примеры:
isNil(null) // => true
isNil('') // => true
Для пустой строки, например, она вернет false.