Как проверить значения null в JavaScript?

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

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

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

}   

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

14 ответов


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

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

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

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


проверить на null конкретно вы можете использовать это:

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

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

if(variable === null)

этот тест только pass for null и не пройдет для "", undefined, false, 0 или NaN.

остальная часть этого в ответ на комментарий inorganik, Да, вы можете проверить каждый отдельно.

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

я создал 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;


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

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

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

см. статью MDN на сравнения равенства и одинаковости подробнее.


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

мы можем проверить значение null,===

if ( value === null ){

}

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

if( value ) {

}

получит значение true, если значение не:

  • null
  • неопределено
  • Нэн
  • пустая строка ("")
  • false
  • 0

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

более чистым способом сделать вашу проверку было бы просто использовать ! оператор:

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

    alert("fill all columns");

}

улучшение по сравнению с принятым ответом, явно проверяя 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");
}

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

 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 собственные ошибки. См.этой.


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

if (!var) {
        console.log("var IS null or undefined");
} else {
        console.log("var is NOT null or undefined");
}

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

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

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

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

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

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

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

'' == 0

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

'' === 0

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

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

'' == null

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

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

pass === ''

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

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


подчеркивание: _.функция isnull

_.isNull(null);
=> true
_.isNull(undefined);
=> false

jQuery:С помощью jQuery.тип

jQuery.type( null ) === "null"

Это не будет работать в случае логических значений, поступающих из БД например:

 value = false

 if(!value) {
   // it will change all false values to not available
   return "not available"
 }

попробуйте это:

if (!variable && typeof variable === "object") {
    // variable is null
}

пожалуйста, внимательно просмотрите перед downvote.

насколько мне известно в в JavaScript когда переменная объявил но не имеет присвоенного значения, его тип undefined. так что мы можем проверить переменную, даже если это будет object держал экземпляр на месте стоимостью.

создайте вспомогательный метод для проверки nullity, который возвращает true и используйте его в своем API.

вспомогательная функция для проверки переменной пусто:

function isEmpty(item){
    if(item){
        return false;
    }else{
        return true;
    }
}

try-catch исключительный вызов API:

try {

    var pass, cpass, email, cemail, user; // only declared but contains nothing.

    // parametrs checking
    if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
        console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
    }else{
        // do stuff
    }

} catch (e) {
    if (e instanceof ReferenceError) {
        console.log(e.message); // debugging purpose
        return true;
    } else {
        console.log(e.message); // debugging purpose
        return true;
    }
}

в некоторых случаях тест:

var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true

console.log("isEmpty? "+isEmpty(item));