Проверка JavaScript на ноль против неопределенного и разницу между == и ===

javascript null undefined

421816 просмотра

8 ответа

12735 Репутация автора

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

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

Автор: MUG4N Источник Размещён: 24.02.2011 08:10

Ответы (8)


914 плюса

750049 Репутация автора

Решение

Как проверить переменную, если она 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. И точно так же getElementByIdоперация DOM возвращает ссылку на объект - либо действительную (если она нашла элемент DOM), либо null(если она этого не сделала).

Интересно (или нет), они свои типы. То есть nullединственное значение в типе Null и undefinedединственное значение в неопределенном типе.

В чем разница между "==" и "==="

Единственная разница между ними заключается в том, что они ==будут выполнять приведение типов, чтобы попытаться получить совпадающие значения, и ===не будут. Так, например, "1" == 1это правда, потому что "1"принуждает к 1. Но "1" === 1это ложь , потому что типы не совпадают. ( "1" !== 1верно.) Первый (реальный) шаг ===- "Являются ли типы операндов одинаковыми?" и если ответ «нет», результат false. Если типы одинаковы, он делает именно то, что ==делает.

Приведение типов использует довольно сложные правила и может иметь неожиданные результаты (например, "" == 0верно).

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

Автор: T.J. Crowder Размещён: 24.02.2011 08:15

92 плюса

2577 Репутация автора

Разница неуловима.

В 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"вернет истину; while 0 === "0"вернет false, потому что число не является строкой.

Вы можете использовать эти операторы , чтобы проверить между . Например:undefinednull

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

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

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true
Автор: Julien Portalier Размещён: 02.10.2012 12:20

8 плюса

3056 Репутация автора

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

Это означает, что переменная еще не инициализирована.

Пример :

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 является логическим объектом.

Автор: kannanrbk Размещён: 03.10.2012 05:36

15 плюса

264345 Репутация автора

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

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

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

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

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

Автор: Tim Down Размещён: 04.10.2012 09:32

1 плюс

1561 Репутация автора

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

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

Это захватит nullиundefined

Автор: DaniDev Размещён: 03.03.2017 06:26

6 плюса

685 Репутация автора

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

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

if(variable)

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

  • значение NULL
  • не определено
  • 0
  • ложный
  • «» (пустая строка)
  • NaN
Автор: Sumit Joshi Размещён: 04.08.2017 01:14

0 плюса

71 Репутация автора

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

}

Автор: Ravikant Размещён: 31.01.2019 12:01

2 плюса

22748 Репутация автора

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

если

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

Автор: Kamil Kiełczewski Размещён: 24.04.2019 04:13
Вопросы из категории :
32x32