Как проверить переменную, если она 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
.
Теперь, несмотря на вышесказанное, обычный способ проверить это - использовать тот факт, что они falsey :
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
является единственным значением в неопределенном типе.
В чем разница между "==" и "=== "
Единственное различие между ними состоит в том, что ==
будет выполнять приведение типов, чтобы попытаться найти совпадающие значения, а ===
- нет.Так, например, "1" == 1
верно, потому что "1"
приводит к 1
.Но "1" === 1
это false , потому что типы не совпадают.("1" !== 1
верно.) Первый (реальный) шаг ===
- это "Типы операндов одинаковы?"и если ответ «нет», результат будет false
.Если типы одинаковы, то это именно то, что делает ==
.
Приведение типов использует довольно сложные правила и может привести к неожиданным результатам (например, "" == 0
верно).
Больше в спецификации: