web-dev-qa-db-ja.com

JavaScriptでnull値をチェックする方法

JavaScriptでnull値を確認する方法私は以下のコードを書きましたが、うまくいきませんでした。

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

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

}   

そして、どうすれば私のJavaScriptプログラムのエラーを見つけることができますか?

470
Mahdi_Nine

Javascriptは、「null」値のチェックに関して非常に柔軟です。私はあなたが実際に空の文字列を探していると推測していますが、この場合、この単純なコードが機能します:

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

空の文字列("")、nullundefinedfalse、および番号0およびNaNをチェックします

数値を明確にチェックしている場合、このメソッドで0を見逃すのはよくある間違いであり、num !== 0が好ましい(またはnum !== -1または~num(ハッキーコード)また、-1)に対してチェックする-1を返す関数について、たとえばindexOf

660
Mark Kahn

Null LYをチェックするには、これを使います。

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

...またはもっと簡単に:

if(variable === null)

このテストはONLYnullに合格し、""undefinedfalse0、または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に対してテストするのは少し難しいです。

311
WebWanderer

すべての場所で=====に置き換えるだけです。

==は、ゆるいまたは抽象的な等価比較です。

===は厳密な等価比較です

MDNの記事「 等価比較と同一性 」を参照してください。

57
ic3b3rg

厳密な等価演算子: - /

私たちは、===でヌルを確認することができます

if ( value === null ){

}

ifを使うだけで

if( value ) {

}

値が でない場合、真と評価されます。

  • ヌル
  • undefined
  • NaN
  • 空の文字列( "")
  • false
25
Arshid KV

まず、関数本体のないreturn文があります。たぶん、それはエラーを投げるでしょう。

あなたのチェックをするためのよりきれいな方法は単に使うことです。オペレーター:

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

    alert("fill all columns");

}
6
Joey C.

明示的に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");
}
5
deekshith

javaScriptで undefined および null をチェックするには、次のように記述するだけです。

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

最後に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 を参照してください。

4
DrStrangeLove

これは、NaNのチェックに関するWebWandererのソリューションに対するコメントです(正式なコメントを残すにはまだ十分な担当者がいません)。解は次のようになります。

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

しかし、これは0のようにvariable = 0.1に丸められる有理数の場合は失敗します。より良いテストは次のようになります。

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

JavaScriptでは、nullと同じ文字列はありません。

passが空の文字列である場合、pass == nullがtrueであることを期待していたかもしれません。ルーズ等価演算子==はある種の型強制を実行することを知っているからです。

たとえば、次の式は真です。

'' == 0

対照的に、厳密な等価演算子===はこれが偽であると言います:

'' === 0

''0がおおよそ等しいと仮定すると、''nullはおおよそ等しいと推測するかもしれません。しかしそうではありません。

この式は偽です。

'' == null

任意の文字列をnullと比較した結果はfalseです。したがって、pass == nullおよびその他すべてのテストは常にfalseであり、ユーザーは警告を受け取りません。

コードを修正するには、各値を空の文字列と比較します。

pass === ''

passが文字列であることが確実な場合は、空の文字列だけが空の文字列と大体等しいので、pass == ''も機能します。一方、ルーズ等価演算子が実行する型強制を特に実行したくない場合を除いて、JavaScriptでは常に厳密な等価を使用することをお勧めします。

どの値の組が大体等しいか知りたい場合は、このトピックに関する Mozillaの記事の - 「Sameness比較」の表を参照してください。

3
Michael Laszlo

値がnullまたは未定義であることを確認するには、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
Ashita.gupta

実際には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

私の状況では、値がnullで未定義であるかどうかをチェックするだけでよく、0false''の値をフィルタリングしたくありませんでした。だから私は2番目のテストを使いましたが、あなたもそれらをフィルタリングする必要があるかもしれません。

1
Naeem Baghi

これはexのためにDBから来るブール値の場合には機能しません。

 value = false

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

投票する前によく見てください。

_ javascript _ 内の変数変数が 宣言されている で値が割り当てられていない場合、その型はundefinedです。そのため、たとえそれが value の代わりに instance を保持するobjectであったとしても、変数をチェックすることができます。

trueを返すnullをチェックするためのヘルパーメソッドを作成し、それを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));
0
Kaleem Ullah

私は不思議に思うこの非常に単純な関数を作りました:

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!' }];};のような単純なオブジェクト.

しかし、それも私たちが作ったこともないような非常に大きな物かもしれません。それで私はそれを通過させる:

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){
  [...]
}
0
Carles Alcolea

値がnullかどうかをテストする別の方法を見つけました。

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

nullは、numberobjectとして同時に機能します。 null >= 0またはnull <= 0を比較すると、trueになります。 null === 0またはnull > 0またはnull < 0を比較するとfalseになります。しかしnullもオブジェクトなので、nullとして検出できます。

私はより複雑な関数を作りました natureof 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")) 
}
0
Tarmo Saluste