Как проверить наличие нулевых значений в JavaScript? - PullRequest
485 голосов
/ 14 мая 2011

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

if (pass == null || cpass == null || email == null || cemail == null || user == null) {      

    alert("fill all columns");
    return false;  

}   

А как я могу найти ошибки в моих программах JavaScript?

Ответы [ 17 ]

647 голосов
/ 14 мая 2011

Javascript очень гибок в отношении проверки «нулевых» значений. Я предполагаю, что вы на самом деле ищете пустые строки, и в этом случае этот более простой код будет работать:

if(!pass || !cpass || !email || !cemail || !user){

, который будет проверять наличие пустых строк (""), null, undefined, false и чисел 0 и NaN

Обратите внимание, что если вы специально проверяете числа, это обычная ошибка - пропустить 0 с помощью этого метода, и предпочтительным является num !== 0 (или num !== -1 или ~num (хакерский код, который также проверяет на *) 1016 *)) для функций, которые возвращают -1, например indexOf)

331 голосов
/ 18 декабря 2014

Для проверки на ноль ОСОБЕННО вы должны использовать это:

if(variable === null && typeof variable === "object")

... или проще:

if(variable === null)

Этот тест будет ТОЛЬКО проход для null и не будет проходить для "", undefined, false, 0 или NaN.

Остальное в ответ на неорганическиекомментарий, да, вы можете проверить каждый из них в отдельности.

Вам необходимо реализовать использование absolutely equals: === и typeof, чтобы быть абсолютно уверенным в своих чеках.

I 'мы создали JSFiddle здесь, чтобы показать все отдельные тесты, работающие

Вот все результаты тестов:

Null Test:

if(variable === null && typeof variable === "object")

- variable = ""; (false) typeof variable = string

- variable = null; (true) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Empty String Test:

if(variable === "" && typeof variable === "string")

- variable = ""; (true) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number




Undefined Test:

if(variable === undefined && typeof variable === "undefined")

- variable = ""; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (true) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



False Test:

if(variable === false && typeof variable === "boolean")

- variable = ""; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (true) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Zero Test:

if(variable === 0 && typeof variable === "number")

- variable = ""; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (true) typeof variable = number

- variable = NaN; (false) typeof variable = number



NaN Test:

if(!parseFloat(variable) && variable != 0 && typeof variable === "number")

- variable = ""; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (true) typeof variable = number

Как вы можетевидите, немного сложнее проверить против NaN;

57 голосов
/ 14 мая 2011

просто замените == на === во всех местах.

== является сравнением свободного или абстрактного равенства

=== - строгое равенство сравнения

Подробнее см. В статье MDN Сравнения равенства и сходство .

26 голосов
/ 05 июля 2016

Оператор строгого равенства: -

Мы можем проверить ноль по ===

if ( value === null ){

}

Просто с помощью if

if( value ) {

}

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

  • нуль
  • неопределенный
  • пустая строка ("")
  • ложь
  • 0
6 голосов
/ 14 мая 2011

Во-первых, у вас есть оператор возврата без тела функции.Скорее всего, это приведет к ошибке.

Более простой способ проверки - просто использовать!оператор:

if (!pass || !cpass || !email || !cemail || !user) {

    alert("fill all columns");

}
5 голосов
/ 14 марта 2018

Улучшение по сравнению с принятым ответом за счет явной проверки на null, но с упрощенным синтаксисом:

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
}

// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
    console.log ("Yayy! None of them are null");
} else {
    console.log ("Oops! At-lease one of them is null");
}
4 голосов
/ 25 февраля 2015

для проверки undefined и null в javascript вам нужно просто написать следующее:

if (!var) {
        console.log("var IS null or undefined");
} else {
        console.log("var is NOT null or undefined");
}
4 голосов
/ 14 мая 2011

вы можете использовать try catch finally

 try {
     document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
 } catch (e) {

     if (e.name.toString() == "TypeError") //evals to true in this case
     //do something

 } finally {}   

вы также можете throw свои собственные ошибки.См. это .

3 голосов
/ 28 августа 2015

В JavaScript ни одна строка не равна null.

Возможно, вы ожидали, что pass == null будет истиной, когда pass - пустая строка, потому что вы знаете, что оператор свободного равенства == выполняет определенные виды приведения типов.

Например, это выражение истинно:

'' == 0

Напротив, оператор строгого равенства === говорит, что это неверно:

'' === 0

Учитывая, что '' и 0 слабо равны, вы можете разумно предположить, что '' и null слабо равны. Однако это не так.

Это выражение ложно:

'' == null

Результат сравнения любой строки с null равен false. Поэтому pass == null и все остальные ваши тесты всегда ложны, и пользователь никогда не получит предупреждение.

Чтобы исправить ваш код, сравните каждое значение с пустой строкой:

pass === ''

Если вы уверены, что pass является строкой, pass == '' также будет работать, потому что только пустая строка свободно равна пустой строке. С другой стороны, некоторые эксперты говорят, что это хорошая практика - всегда использовать строгое равенство в JavaScript, если вы специально не хотите выполнять приведение типов, которое выполняет оператор свободного равенства.

Если вы хотите узнать, какие пары значений слабо равны, см. Таблицу «Сравнения одинаковости» в статье Mozilla на эту тему .

3 голосов
/ 18 февраля 2015

Это комментарий к решению WebWanderer относительно проверки на NaN (у меня еще недостаточно представителей, чтобы оставить официальный комментарий). Решение читается как

if(!parseInt(variable) && variable != 0 && typeof variable === "number")

, но это не удастся для рациональных чисел, которые округляются до 0, таких как variable = 0.1. Лучшим тестом будет:

if(isNaN(variable) && typeof variable === "number")
...