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

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

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

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

}   

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

Ответ 1

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

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

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

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

Ответ 2

Чтобы проверить значение 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;

Ответ 3

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

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

=== это строгое сравнение

См. Статью MDN о сравнениях и сходстве равенства для более подробной информации.

Ответ 4

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

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

if ( value === null ){

}

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

if( value ) {

}

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

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

Ответ 5

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

Более чистый способ сделать ваш чек - просто использовать! Оператор:

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

    alert("fill all columns");

}

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

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

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

Ответ 10

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

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

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

'' == 0

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

'' === 0

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

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

'' == null

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

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

pass === ''

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

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

Ответ 11

подчеркивание: _. isNull

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

jQuery: jQuery.type

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

Ответ 12

На самом деле, я думаю, вам может понадобиться использовать 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 или '' значения. поэтому я использовал второй тест, но вам может понадобиться отфильтровать их, что может привести к использованию первого теста.

Ответ 13

Я нашел другой способ проверить, если значение равно нулю:

if(variable >= 0 && typeof variable === "object")

null действует как number и object одновременно. Сравнение null >= 0 или null <= 0 приводит к true. Сравнение null === 0 или null > 0 или null < 0 приведет к ложному. Но поскольку null также является объектом, мы можем обнаружить его как ноль.

Я сделал более сложную функцию. Nature of witch будет работать лучше, чем typeof, и мне скажут, какие типы включать или сохранять сгруппированными.

/* function natureof(variable, [included types])
included types are 
    null - null will result in "undefined" or if included, will result in "null"
    NaN - NaN will result in "undefined" or if included, will result in "NaN"
    -infinity - will separate negative -Inifity from "Infinity"
    number - will split number into "int" or "double"
    array - will separate "array" from "object"
    empty - empty "string" will result in "empty" or
    empty=undefined - empty "string" will result in "undefined"
*/
function natureof(v, ...types){
/*null*/            if(v === null) return types.includes('null') ? "null" : "undefined";
/*NaN*/             if(typeof v == "number") return (isNaN(v)) ? types.includes('NaN') ? "NaN" : "undefined" : 
/*-infinity*/       (v+1 === v) ? (types.includes('-infinity') && v === Number.NEGATIVE_INFINITY) ? "-infinity" : "infinity" : 
/*number*/          (types.includes('number')) ? (Number.isInteger(v)) ? "int" : "double" : "number";
/*array*/           if(typeof v == "object") return (types.includes('array') && Array.isArray(v)) ? "array" : "object";
/*empty*/           if(typeof v == "string") return (v == "") ? types.includes('empty') ? "empty" : 
/*empty=undefined*/ types.includes('empty=undefined') ? "undefined" : "string" : "string";
                    else return typeof v
}

// DEMO
let types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, length: 2}]

for(i in types){
console.log("natureof ", types[i], " = ", natureof(types[i], "null", "NaN", "-infinity", "number", "array", "empty=undefined")) 
}

Ответ 14

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

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

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

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

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

попробуй поймать исключительный вызов 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));

Ответ 15

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

 value = false

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

Ответ 16

Я сделал эту очень простую функцию, которая творит чудеса:

function safeOrZero(route) {
  try {
    Function('return (${route})')();
  } catch (error) {
    return 0;
  }
  return Function('return (${route})')();
}

Маршрут - это любая цепочка ценностей, которая может взорваться. Я использую его для JQuery/Cheerio и объектов и тому подобное.

Примеры 1: простой объект, такой как этот const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];}; const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];}; ,

Но это может быть очень большой объект, который мы даже не сделали. Так что я передаю это через:

let value1 = testobj.items[2].val;  // "hum!"
let value2 = testobj.items[3].val;  // Uncaught TypeError: Cannot read property 'val' of undefined

let svalue1 = safeOrZero('testobj.items[2].val')  // "hum!"
let svalue2 = safeOrZero('testobj.items[3].val')  // 0

Конечно, если вы предпочитаете, вы можете использовать null или 'No value'... Все, что соответствует вашим потребностям.

Обычно запрос DOM или селектор jQuery могут выдать ошибку, если она не найдена. Но используя что-то вроде:

const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
  [...]
}

Ответ 17

Попробуйте следующее:

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

Ответ 18

Вы также можете использовать этот повторно используемый is-nil компонент с открытым исходным кодом, который определяет, является ли ссылка val нулевой или undefined и возвращает логическое.

Примеры:

isNil(null) // => true
isNil('') // => true

Он вернет false, даже если задана пустая строка, например.

Ответ 19

Вы можете использовать модуль lodash, чтобы проверить, является ли значение пустым или неопределенным

_.isNil(value)
Example 

 country= "Abc"
    _.isNil(country)
    //false

   state= null
    _.isNil(state)
    //true

city= undefined
    _.isNil(state)
    //true

   pin= true
    _.isNil(pin)
    // false   

Ссылочная ссылка: https://lodash.com/docs/#isNil