Проверка JavaScript на ноль против неопределенного и разницу между == и === - PullRequest
540 голосов
/ 24 февраля 2011

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

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

  2. В чем разница между == и === (в Google трудно найти "===")?

Ответы [ 8 ]

886 голосов
/ 24 февраля 2011

Как проверить переменную, если она 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 верно).

Больше в спецификации:

90 голосов
/ 02 октября 2012

Разница тонкая.

В 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"

Это может оказаться полезным в аргументах функции. Вы можете хотеть иметь значение по умолчанию, но считаете ноль приемлемым. В этом случае вы можете сделать:

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 и 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
15 голосов
/ 04 октября 2012

Спецификация - это место, где можно получить полные ответы на эти вопросы. Вот резюме:

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

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

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

Больше чтения:

8 голосов
/ 03 октября 2012

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 голосов
/ 04 августа 2017

Как проверить переменную, если она нулевая или неопределенная

, просто проверить, имеет ли переменная допустимое значение, например:

if(variable)

она вернетсяtrue, если переменная не содержит:

  • null
  • undefined
  • 0
  • false
  • "" (пустострока)
  • NaN
1 голос
/ 24 апреля 2019

Объявление 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');

Объявление 2. === проверяет значения и типы. == не требует одинаковых типов и неявного преобразования перед сравнением (используя .valueOf() и .toString()). Здесь у вас есть все ( src ):

если

enter image description here

== (его отрицание ! = )

enter image description here

=== (его отрицание ! == )

enter image description here

1 голос
/ 03 марта 2017

Если ваша (логическая) проверка предназначена для отрицания (!) И вы хотите захватить как JS null, так и undefined (поскольку разные браузеры будут давать разные результаты), вы бы использовали менее ограничительное сравнение: например

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

Это будет захватывать null и undefined

0 голосов
/ 31 января 2019

Вы можете использовать приведенный ниже код для проверки всех четырех (4) условий для проверки, таких как не ноль, не пусто, не неопределено и не ноль, используйте только этот код (! (! (Переменная))) в 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);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...