Как проверить переменную, если она
null
илиundefined
и в чем разница междуnull
иundefined
?В чем разница между
==
и===
(трудно найти в Google "===")?
javascript
null
undefined
MUG4N
источник
источник
==
и===
хорошо описана здесь .Ответы:
Является ли переменная
null
:... но обратите внимание, что последнее также будет верно, если
a
естьundefined
.Это
undefined
:... но опять же, обратите внимание, что последний является расплывчатым; это также будет верно, если
a
естьnull
.Теперь, несмотря на вышесказанное, обычный способ проверить это - использовать тот факт, что они ложные :
Это определяется ToBoolean в спецификации.
Оба значения обычно используются для обозначения отсутствия чего-либо.
undefined
является более общим, используется как значение по умолчанию для переменных, пока им не назначено какое-то другое значение, как значение аргументов функции, которые не были предоставлены при вызове функции, и как значение, которое вы получаете, когда задаете объект для собственности это не имеет. Но это также может быть явно использовано во всех этих ситуациях. (Есть разница между объектом, не имеющим свойства, и имеющим свойство со значениемundefined
; есть разница между вызовом функции со значениемundefined
для аргумента и полным отключением этого аргумента.)null
немного конкретнее, чемundefined
: Это пустая ссылка на объект. Конечно, JavaScript является типизированным, но не все функции, с которыми взаимодействует JavaScript, являются типизированными. Если для API, такого как DOM в браузерах, нужна пустая ссылка на объект, мы используемnull
, а неundefined
. И точно так жеgetElementById
операция DOM возвращает ссылку на объект - либо действительную (если она нашла элемент DOM), либоnull
(если она этого не сделала).Интересно (или нет), они свои типы. То есть,
null
это единственное значение в типе Null иundefined
единственное значение в неопределенном типе.Единственная разница между ними заключается в том, что они
==
будут выполнять приведение типов, чтобы попытаться получить совпадающие значения, и===
не будут. Так, например,"1" == 1
это правда, потому что"1"
принуждает к1
. Но"1" === 1
это ложь , потому что типы не совпадают. ("1" !== 1
верно.) Первый (реальный) шаг===
- "Являются ли типы операндов одинаковыми?" и если ответ «нет», результатfalse
. Если типы одинаковы, он делает именно то, что==
делает.Приведение типов использует довольно сложные правила и может иметь неожиданные результаты (например,
"" == 0
верно).Больше в спецификации:
==
также называемое «свободным» равенством)===
)источник
if (a) { ... }
будет означать «еслиa
верно», где «правда» - это ненулевое, ненулевое, ненулевое, ненулевое, непустое строковое значение. :-)null
это не объект , это ссылка на объект, означающая «нет объекта». Это важно, потому что это то, что используется с предоставленными хостом интерфейсами, когда они предоставляют ссылки на объекты, но не имеют их для предоставления (например,node.nextSibling
когдаnode
последний элемент в его родительском элементе илиgetElementById
когда нет элемента с таким идентификатором). Технология, используемая хостом для этого, может быть не такой гибкой, как в JavaScript для типов переменных / свойств, поэтому было необходимо иметьnull
obj ref (в отличие отundefined
).typeof null
возвращать «объект» имеет смысл. Единственное другое значение, которое имело бы смысл, было бы «нулевым», поскольку оно определенно должно возвращать что-то отличное отtypeof undefined
. null представляет нулевую ссылку на объект, что, по крайней мере, означает, что переменная, содержащая ее, предназначена для некоторого типа «объекта». Если это была ошибка, это была хорошая ошибка. В любом случае, что касается ответа, совет оundefined
! ==undefined
во время написания сценариев в разных окнах полезен, особенно для целей отладки.Разница неуловима.
В JavaScript
undefined
переменная - это переменная, которая никогда не объявлялась или никогда не присваивала значение. Допустим, вы объявляете,var a;
к примеру, такa
и будетundefined
, потому что ему никогда не присваивалось никакого значения.Но если потом назначить,
a = null;
тоa
теперь будетnull
. В JavaScriptnull
это объект (попробуйтеtypeof null
в консоли JavaScript, если вы мне не верите), что означает, что null является значением (фактически дажеundefined
является значением).Пример:
Это может оказаться полезным в аргументах функции. Вы можете хотеть иметь значение по умолчанию, но считаете ноль приемлемым. В этом случае вы можете сделать:
Если вы опустите
optional
параметр,doSomething(1, 2) then
необязательной будет"three"
строка, но если вы передадите,doSomething(1, 2, null)
то необязательной будетnull
.Что касается равных
==
и строго равных===
компараторов, то первый тип имеет слабый тип, тогда как строго равный также проверяет тип значений. Это означает, что0 == "0"
вернет истину; while0 === "0"
вернет false, потому что число не является строкой.Вы можете использовать эти операторы , чтобы проверить между . Например:
undefined
null
Последний случай интересен, потому что он позволяет вам проверить, является ли переменная неопределенной или нулевой, и ничего больше:
источник
Спецификация - это место, где можно получить полные ответы на эти вопросы. Вот резюме:
x
вы можете:null
путем прямого сравнения с помощью===
. Пример:x === null
undefined
одним из двух основных методов: прямое сравнение сundefined
илиtypeof
. По разным причинам я предпочитаюtypeof x === "undefined"
.null
иundefined
с помощи==
и опираясь на несколько негласных правилах типа принуждения , что среднийx == null
делают именно то , что вы хотите.==
и===
заключается в том, что если операнды имеют разные типы,===
они всегда будут возвращаться, вfalse
то время как==
один или оба операнда будут преобразованы в один и тот же тип с использованием правил, которые приводят к некоторому слегка неинтуитивному поведению. Если операнды имеют одинаковый тип (например, оба являются строками, как в приведенномtypeof
выше сравнении)==
и===
будут вести себя точно так же.Больше чтения:
источник
просто проверьте, имеет ли переменная допустимое значение, например:
он вернет true, если переменная не содержит:
источник
не определено
Это означает, что переменная еще не инициализирована.
Пример :
равно (==)
Это только проверка значения равно, а не тип данных.
Пример :
Потому что он проверяет только значение.
Строгое равенство (===)
Проверяет значение и тип данных должны быть одинаковыми.
Пример :
Поскольку он проверяет, тип данных x является примитивным типом, а y является логическим объектом.
источник
Объявление 1.
null
не является идентификатором свойства глобального объекта, какundefined
может бытьПоказать фрагмент кода
Объявление 2.
===
Проверка значений и типов. Не==
требуют одинаковых типов и сделали неявное преобразование перед сравнением (используя.valueOf()
и.toString()
). Здесь у вас есть все ( SRC ):если
== (его отрицание ! = )
=== (это отрицание ! == )
источник
document.all == null
иdocument.all !== null
Если ваша (логическая) проверка предназначена для отрицания (!) И вы хотите захватить как JS, так
null
иundefined
(поскольку разные браузеры будут давать разные результаты), вы бы использовали менее ограничительное сравнение: например:Это захватит
null
иundefined
источник
Попробуйте с другой логикой . Вы можете использовать приведенный ниже код для проверки всех четырех (4) условий для проверки, например, не ноль, не пустой, не неопределенный и не ноль, используйте только этот код (! (! (Variable))) только в javascript и jquery.
}
источник