Как проверить наличие нулевых значений в 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 ]

1 голос
/ 19 мая 2019

Вы можете использовать модуль 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

1 голос
/ 08 марта 2019

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

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

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

Я сделал более сложную функцию natureof , которая будет работать лучше, чем 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")) 
}
1 голос
/ 04 ноября 2018

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

0 голосов
/ 05 октября 2015

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

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));
0 голосов
/ 12 марта 2019

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

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

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

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' ... Независимо от того, что вам нужно.Селектор jQuery может выдать ошибку, если она не найдена.Но используя что-то вроде:

const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
  [...]
}
0 голосов
/ 03 ноября 2015

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

if (!variable && typeof variable === "object") {
    // variable is null
}
0 голосов
/ 23 мая 2016

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

 value = false

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