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

Я знаю, что ниже представлены два способа в JavaScript проверить, не является ли переменная null, но я не понимаю, что лучше всего использовать.

Я должен делать:

if (myVar) {...}

or

if (myVar !== null) {...}

person nickb    schedule 05.12.2010    source источник
comment
Возможный дубликат Как проверить наличие пустой строки в JavaScript?   -  person T.Todua    schedule 04.12.2018


Ответы (9)


Они не эквивалентны. Первый выполнит блок, следующий за оператором if, если myVar является истинным (т. Е. Оценивается как true в условном выражении), а второй выполнит блок, если myVar - любое значение, отличное от null.

Единственными значениями, которые не соответствуют действительности в JavaScript, являются следующие (также известные как ложные значения):

  • null
  • undefined
  • 0
  • "" (пустая строка)
  • false
  • NaN
person Tim Down    schedule 05.12.2010

Вот как вы можете проверить, не является ли переменная NULL:

if (myVar !== null) {...}

блок будет выполнен, если myVar не равен нулю .. он будет выполнен, если myVar не определен, или false, или 0, или NaN, или что-то еще ..

person Tolgahan Albayrak    schedule 05.12.2010
comment
На случай, если вам интересно ... Это не проверяет пустую строку ("") и undefined. См. Мою скрипку как ссылку: jsfiddle.net/b0tm7yaf - person Barrosy; 18.01.2019

Прочтите этот пост: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

В нем есть несколько хороших советов для JavaScript в целом, но одна вещь, о которой он упоминает, - это то, что вы должны проверять значение null, например:

if(myvar) { }

В нем также упоминается то, что считается «ложным», о чем вы, возможно, не подозреваете.

person Jonathon Bolster    schedule 05.12.2010
comment
На самом деле эта проверка небезопасна. Если myvar равен 0, false или любому другому ложному значению, тест завершится неудачно (если вы только намереваетесь проверить, не является ли он ненулевым). Поэтому используйте это только для проверки ненулевого значения, если переменная никогда не может иметь другое ложное значение. - person Werzi2001; 19.09.2013
comment
ссылка больше не работает. Я нашел копию того, что похоже на сообщение здесь: appendto.com/2010/10/ Это странно, потому что сообщение Элайджи (и пример кода) предполагает, что он является автором, но он не указан в качестве автора там ... - person thepaulpage; 15.07.2015
comment
Похоже, этого сайта больше не существует. Было бы полезно, если бы вы могли включить информацию в сам пост, а не просто внешнюю ссылку. - person apraetor; 22.11.2016
comment
Это не сработает, если значение присутствует, но равно 0 (нулю). - person zmechanic; 23.03.2020

  • код внутри вашего if(myVar) { code } НЕ будет выполняться только тогда, когда myVar равно: false, 0, "", null, undefined, NaN или вы никогда не определяли переменную myVar (тогда дополнительно код останавливает выполнение и генерирует исключение).
  • код внутри вашего if(myVar !== null) {code} НЕ будет выполняться, только если myVar равно null или вы никогда его не определили (выдает исключение).

Здесь у вас есть все (src)

если

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

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

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

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

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

person Kamil Kiełczewski    schedule 18.04.2019

Есть еще один возможный сценарий, с которым я только что столкнулся.

Я выполнил вызов ajax и получил данные как null в строковом формате. Пришлось проверить вот так:

if(value != 'null'){}

Итак, null - это строка, которая читается как «null», а не на самом деле null.

РЕДАКТИРОВАТЬ: Следует понимать, что я не продаю это так, как это должно быть сделано. У меня был сценарий, в котором это было единственное, что можно было сделать. Я не уверен, почему ... возможно, парень, который написал серверную часть, неправильно представлял данные, но, тем не менее, это реальная жизнь. Прискорбно видеть, что за это проголосовал кто-то, кто понимает, что это не совсем правильно, а затем проголосовал за кого-то, что действительно помогает.

person Flat Cat    schedule 12.10.2014
comment
Лучше проанализировать свое значение, чем сравнивать со строками null. - person Bergi; 03.03.2015
comment
Этот ответ является законным, независимо от того, понимаете ли вы его применение. Я не люблю, когда меня опускают за то, что публикуют действительно сработавшие вещи. Вы заметили, что за него проголосовали, прежде чем вы его коснулись? Потому что это реальный сценарий. - person Flat Cat; 03.03.2015
comment
да, и я проголосовал против, потому что считаю это неправильным решением. В случае вызова ajax вам лучше сделать value = JSON.parse(value), а затем использовать простой и правильный value != null тест. - person Bergi; 03.03.2015
comment
Видимо вы не понимаете. Я понимаю, что ты думаешь, что знаешь, но это не так. - person Flat Cat; 04.03.2015
comment
Я понимаю, что это было рабочее решение. Но я не думаю, что это хороший совет, поэтому, пожалуйста, уважайте мой голос против. - person Bergi; 04.03.2015

Иногда, если он даже не определен, лучше подготовиться. Для этого я использовал typeof.

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}
person OpenUser    schedule 07.12.2018

если myVar имеет значение null, тогда, если блок не выполняется, в противном случае он будет выполнен.

if (myVar != null) {...}

person Sanjay Kumaar    schedule 05.09.2017
comment
Не строка 'null', а специальное значение null. - person Micah Walter; 05.11.2018

if (0) означает false, if (-1 или любое другое число, кроме 0) означает true. следующее значение не соответствует действительности, null, undefined, 0, (пустая строка), false, NaN

никогда не используйте числовой тип, такой как id, как

if (id) {}

для типа id с возможным значением 0 мы не можем использовать if (id) {}, потому что if (0) будет означать ложный, недопустимый, что, как мы хотим, означает действительный как истинный номер идентификатора.

Итак, для типа id мы должны использовать следующее:

if ((Id !== undefined) && (Id !== null) && (Id !== "")) {

} else {

}

для другого строкового типа мы можем использовать if (string) {}, потому что null, undefined, пустая строка будут оцениваться как false, что правильно.

if (string_type_variable) { }
person hoogw    schedule 08.09.2020

Перечисленные здесь два условных оператора не лучше друг друга. Ваше использование зависит от ситуации. У вас, кстати, опечатка во 2-м примере. После восклицательного знака должен стоять только один знак равенства.

В первом примере определяется, истинно ли значение в myVar, и выполняется код внутри {...}

Во втором примере проверяется, не равно ли myVar null, и если этот случай верен, ваш код будет выполняться внутри {...}

Я предлагаю взглянуть на условные операторы, чтобы получить больше техник. Ознакомившись с ними, вы сможете решить, когда они вам понадобятся.

person THE DOCTOR    schedule 05.12.2010
comment
Вероятно, это не опечатка во втором примере. Этот второй = имеет решающее значение и имеет огромное значение для вопроса. Возможно, вы не знаете о существовании операторов !== и === в JavaScript? - person Tim Down; 06.12.2010
comment
Спасибо что подметил это. Я сразу подумал, что это опечатка, а теперь вспомню то, чего давно не видел и о чем забыл. - person THE DOCTOR; 06.12.2010