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


287

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

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

if (myVar) {...}

или

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

Ответы:


400

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

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

  • null
  • undefined
  • 0
  • "" (пустая строка)
  • false
  • NaN

70

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

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

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


1
В случае, если кому интересно ... Это не проверяет пустую строку ("")и неопределенную. Смотрите мою скрипку в качестве ссылки: jsfiddle.net/b0tm7yaf
Barrosy

47

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

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

if(myvar) { }

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


33
Эта проверка на самом деле не является безопасной. Если myvar равно 0, false или любому другому ложному значению, тест не пройден (если вы только намерены проверить, не является ли он нулевым). Так что используйте это только для проверки на ненулевое значение, если переменная никогда не может иметь другого ложного значения.
Werzi2001

2
ссылка больше не работает. Я нашел здесь копию поста: appendto.com/2010/10/… Хотя это странно, потому что пост Элайджи (и пример кода) предполагает, что он является автором, но он не указан там как автор ...
thepaulpage

2
Похоже, что этот сайт больше не существует. Было бы полезно, если бы вы могли включить информацию в сам пост, а не просто внешнюю ссылку.
apraetor

Это не будет работать, если значение присутствует, но 0 (ноль)
zmechanic

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

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

если

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

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

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

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

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


9

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

Я сделал AJAX-вызов и получил данные как нулевые, в строковом формате. Я должен был проверить это так:

if(value != 'null'){}

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

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


Скорее анализируйте вашу ценность, чем сравнивайте со nullстроками.
Берги

1
Этот ответ является законным, независимо от того, понимаете ли вы его применение. Я не ценю, что меня опровергают за публикацию того, что действительно работает. Вы заметили, что у него был голос перед тем, как прикоснуться к нему? Это потому, что это реальный сценарий.
Плоская кошка

3
да, и я проголосовал, потому что я думаю, что это неправильное решение. В случае вызова ajax, вам лучше сделать, value = JSON.parse(value)а затем использовать простой и правильный value != nullтест
Bergi

2
Видимо, ты не понимаешь. Я понимаю, что ты думаешь, что ты, но ты не.
Плоская кошка

4
Я понимаю, что это было рабочее решение. Но я не думаю, что это хороший совет, поэтому, пожалуйста, уважайте мое отрицательное мнение.
Берги


1

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

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

-4

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

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

Во 2-м примере оценивается , не равен ли myVar нулю, и если этот случай равен true, он выполнит ваш код внутри {...}

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


12
Это, вероятно, не опечатка во втором примере. Эта секунда =имеет решающее значение и имеет огромное значение для вопроса. Возможно , вы не знаете о существовании !==и ===операторов в JavaScript?
Тим Даун

1
Спасибо что подметил это. Я сразу подумал, что это опечатка, но теперь вспоминаю то, что я давно не видел и о котором забыл.
ДОКТОР
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.