nullでないかどうかのJavaScriptチェック


132

以下は、フォームの値を取得するコードスニペットです。さらに処理する前に、値がnullでないかどうかを確認してください。

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

なぜそれが起こるのか.. ??


2
6人以上のユーザーが質問を編集したため、CWが発生しました。
YOUは

!==の代わりに!=
GetBackerZ

回答:


78

これはnull、valがではなく、'null'文字列として含まれているためです。

「null」で確認してみてください

if ('null' != val)

これがいつどのように機能するかについては、以下の詳細をご覧ください


2
(null!= val)どういうわけか、引用符で機能していなかった場合
Ananda

質問のMr.x、nullは文字列だった...あなたのケースはおそらく違う
Arsen Mkrtchyan

145

これはあなたのためのトリックを行います

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
技術的にはこれでうまくいきますが、ダブルノット(!!)はプログラミングのどんちゃん騒ぎです。これは実際にはと同等でありif(val)、読みやすくなっています。私はそれに固執します(fyi Ujwal、!! valはCまたはC ++でも技術的に機能するはずです)javascriptの「真正
Will Buck

2
if(!Boolean(val))
thedjaney 2013

1
!! は単なるダブルネガティブなので、文字通りif(val.exists)と言っています。それでも私はそれがどのように見えるかがまだ好きです!
倉井バンクス2013

12
評価がfalseの場合val = 0、これは失敗!!0します
punkrockpolly

3
それは単純なダブルネガティブではありません。それは変容するダブルネガティブです。基本的に、変数をブール値に変換します。件名に言うが、あなたの変数がある場合のことを言って、それを十分にたくさんあります0falsenullundefinedまたはに解決されることをいくつかのような値true1とは!、あなたが取得するつもりだfalseために!!。使用する場合は、控えめに使用する必要があります。
Guy Passy 2016年

83

「nullでない」かどうかを確認するには3つの方法があります。私の推奨は、Strict Not Versionを使用することです。

1.厳密なバージョンではない

if (val !== null) { ... }

Strict Not Versionは、「Strict Equality Comparison Algorithm」http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6を使用します!==より、より高速なパフォーマンスを持っている!=厳密な等価比較アルゴリズムは値型キャストしませんので、演算子。

2.非厳密なバージョンではない

if (val != 'null') { ... }

非厳密バージョンでは、「抽象等値比較アルゴリズム」http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3を使用します!=より遅い性能を有する!==抽象等価比較アルゴリズムは、値を型キャストするためのオペレータ。

3. Double Notバージョン

if (!!val) { ... }

Double Not Version !!は、Strict Not Version !==とNon-Strict Not Version !=https://jsperf.com/tfm-not-null/6)よりもパフォーマンスが高速です。しかし、それはのような「Falsey」値型キャストされますundefinedNaN虚偽に(http://www.ecma-international.org/ecma-262/5.1/#sec-9.2予期しない結果になる場合があります)、そしてのでそれが悪化し、読みやすさを持っていますnull明示されていません。


それは非常に奇妙です。!!val私のために働いたが、しval!==nullていない。それはなぜです?
TheLogicGuy

@TheLogicGuy-のデータ型はval何ですか?console.log(typeof val)
tfmontague

数。コードは配列から「悪い」値(null、0など)を削除します。ここでは、コードは次のとおりです。pastebin.com/L7Z1BtuL
TheLogicGuy

1
@TheLogicGuy-あなたの実際の問題はnullとは何の関係もありません。NaNは正しくフィルタリングしていません。常にtrueを返します。これは機能するはずです:!(isNaN(val)&&(typeof val!== "undefined"))。JavaScriptには、「Truthy」と「Falsey」として知られる概念があります。double-not演算子!!は、以外のものも削除しますnull。変換NaNundefinedてfalseに変換します。そして、それがdouble not-operatorを使用するときに配列が正しくフィルタリングする理由!!です。
tfmontague

30

!==as as !=を使用すると、非推移的なJavaScript真理値表の奇妙な世界に移動できます。


undefinedまたはを具体的に確認する場合を除きますnull。その場合、のような他の偽の値に対して、またはに対してval != nullは戻りません。trueundefinednull0
エリックH

8

厳密なnot equals比較演算子を!==使用して、ユーザーが入力した場合ににアクセス"null"できないようにする必要がありますelse


1
彼女の名前は、データ入力フォームに受け入れられなかった場合はスーザンヌル笑幸せではないでしょう
Andez

5

おそらく、の値valが実際の値では"null"なく文字列であるためですnull


3

これは正常に動作するはずです。

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }


1

これは動作します:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.