Проверка JavaScript на null против undefined и разница между == и ===
Я знаю, я знаю, что должны быть какие-то темы, охватывающие эту тему. Но я использовал поиск и не получил ответа, который соответствует моим потребностям. Итак, мы идем:
Как проверить переменную, если она
null
илиundefined
и в чем разница междуnull
иundefined
?в чем разница между "= = " и "= = = " (трудно найти Google для
===
)?
6 ответов
Как проверить переменную, если она
null
илиundefined
...
переменная null
:
if (a === null)
// or
if (a == null) // but see note below
...но обратите внимание, что последнее также будет верно, если a
is undefined
.
это undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
...но опять же, обратите внимание, что последнее неясно; это также будет верно, если a
is 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
. Но!--29-- > is false, потому что типы не совпадают. ("1" !== 1
- это правда.) Первый (реальный) шаг ===
is " являются ли типы операндов одинаковыми?"и если ответ "нет", то результат false
. Если типы одинаковы, он делает именно то, что ==
делает.
тип принуждения использует довольно сложные правила и может иметь удивительные результаты (например,"" == 0
- это правда).
подробнее в спецификации:
-
Абстрактное Сравнение Равенства (
==
, также называемый "свободный" равенство) -
Строгое Сравнение Равенства (
===
)
разница незначительная.
в JavaScript an 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
необязательно будет "three"
строка, но если вы передадите doSomething(1, 2, null)
тогда необязательно будет null
.
как равного ==
и строго равной ===
компараторы, первый из которых слабо тип, в то время как строго равный также проверяет тип значений. Это значит, что 0 == "0"
возвращает значение true; в то время как 0 === "0"
вернет false, потому что число не является строкой.
вы можете использовать эти операторы для проверки между undefined
an null
. Например:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
последний случай интересен, потому что он позволяет проверить, является ли переменная неопределенной или нулевой и ничего больше:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
спец это место, чтобы пойти на полные ответы на эти вопросы. Вот резюме:
- для переменной
x
вы можете:- проверить, является ли это
null
путем прямого сравнения с помощью===
. Пример:x === null
- проверить, является ли это
undefined
любым из двух основных методов: прямое сравнение сundefined
илиtypeof
. Для разным причинам, я предпочитаюtypeof x === "undefined"
. - проверить, является ли это одним из
null
иundefined
С помощью==
и полагаясь на слегка тайные правила принуждения типа, которые означаютx == null
делает именно то, что вы хотите.
- проверить, является ли это
- основная разница между
==
и===
это если операнды разных типов,===
всегда будет возвращатьfalse
пока==
преобразует один или оба операнда в один и тот же тип с помощью правила что приведите к некоторому неинтуитивному поведению. Если операнды одного типа (например, оба являются строками, например, вtypeof
сравнение выше),==
и===
будет вести себя точно так же.
читать:
- Ангуса Кролла правда, равенство и JavaScript
- Андреа Giammarchi это Код JavaScript Принуждения Демистифицированный
- comp.ленг.в JavaScript часто задаваемые вопросы: в JavaScript Type-Conversion
неопределено
Это означает, что переменная еще не intialized .
пример :
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-логическим объектом .
Как проверить переменную, если она null или undefined
просто проверьте, имеет ли переменная допустимое значение:
if(variable)
он вернет true, если переменная не содержит:
- null
- undefined
- 0
- false
- "" (пустая строка)
- Нэн
если ваша (логическая) проверка для отрицания (!) и вы хотите захватить оба JS null
и undefined
(поскольку разные браузеры дадут вам разные результаты) вы будете использовать менее ограничительное сравнение:
например:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
это захватит оба null
и undefined