null диафан - Как проверить нулевые значения в JavaScript?




документация модули (13)

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

 value = false

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

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

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

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

}   

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


вы можете использовать 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 свои собственные ошибки. Смотрите this .


Пожалуйста, внимательно ознакомьтесь с нижним горизонтом.

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

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

helper, чтобы проверить, пуста ли переменная:

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

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

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));

Во-первых, у вас есть оператор 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");
}


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

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

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

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

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

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

if ( value === null ){

}

Просто используя if

if( value ) {

}

будет оцениваться как true, если значение не указано :

  • ноль
  • не определено
  • NaN
  • пустой строки ("")
  • ложный
  • 0

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

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

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

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

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

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


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

== - свободное или абстрактное сравнение равенства

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

Более подробную информацию см. В статье MDN, посвященной сравнениям и идентичности Equality .


Чтобы проверить значение null SPECIFICALLY, вы должны использовать это:

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

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

if(variable === null)

Этот тест будет ТОЛЬКО передавать значение 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 ;


На самом деле, я думаю, вам может понадобиться использовать if (value !== null || value !== undefined) потому что если вы используете if (value) вы можете также фильтровать 0 или ложные значения.

Рассмотрим эти две функции:

const firstTest = value => {
    if (value) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}
const secondTest = value => {
    if (value !== null && value !== undefined) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}

firstTest(0);            // result: failed
secondTest(0);           // result: passed

firstTest(false);        // result: failed
secondTest(false);       // result: passed

firstTest('');           // result: failed
secondTest('');          // result: passed

firstTest(null);         // result: failed
secondTest(null);        // result: failed

firstTest(undefined);    // result: failed
secondTest(undefined);   // result: failed

В моей ситуации мне просто нужно было проверить, является ли значение нулевым и неопределенным, и я не хочу фильтровать 0 или false или '' значения. поэтому я использовал второй тест, но вам может понадобиться также их фильтровать, что может привести к использованию первого теста.


Мне нравятся статьи из Nat Pryce. Вот ссылки:

В статьях есть также ссылка на репозиторий Git для Java Maybe Type, который я нахожу интересным, но я не думаю, что это само по себе может уменьшить разбухание кода проверки. После некоторых исследований в Интернете, я думаю ! = Нулевой код bloat может быть уменьшен главным образом путем тщательного проектирования.







javascript null compare