Проверка JavaScript на null против undefined и разница между == и ===

Я знаю, я знаю, что должны быть какие-то темы, охватывающие эту тему. Но я использовал поиск и не получил ответа, который соответствует моим потребностям. Итак, мы идем:

  1. Как проверить переменную, если она null или undefined и в чем разница между null и undefined?

  2. в чем разница между "= = " и "= = = " (трудно найти 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

спец это место, чтобы пойти на полные ответы на эти вопросы. Вот резюме:

  1. для переменной x вы можете:

    • проверить, является ли это null путем прямого сравнения с помощью ===. Пример: x === null
    • проверить, является ли это undefined любым из двух основных методов: прямое сравнение с undefined или typeof. Для разным причинам, я предпочитаю typeof x === "undefined".
    • проверить, является ли это одним из null и undefined С помощью == и полагаясь на слегка тайные правила принуждения типа, которые означают x == null делает именно то, что вы хотите.

  2. основная разница между == и === это если операнды разных типов,=== всегда будет возвращать false пока == преобразует один или оба операнда в один и тот же тип с помощью правила что приведите к некоторому неинтуитивному поведению. Если операнды одного типа (например, оба являются строками, например, в typeof сравнение выше), == и === будет вести себя точно так же.

читать:


неопределено

Это означает, что переменная еще не 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