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

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

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