web-dev-qa-db-ja.com

JavaScript:nullとの比較-!== vs!=

それでは、node.jsアプリの作業中にSublimeエディターにLinterをインストールしました。キャッチしたことの1つは、オブジェクトをnullと比較するために常に!==を使用する必要があることです(通常は!=を使用します)。

だから私はそれを変更しました...しかし、その後、!==が機能していないことに気付きました。

私はこのシナリオを持っています:

var x = null;
if (x !== null)
    console.log('x is not equal to null');

!==を使用すると、明らかにそうではありませんが、コンソールはその行を出力しました。 !=に切り替えたとき、正常に動作しました。

だから私の質問は、なぜ私が望んでいることをしないなら!.

私は何かが欠けていることを知っています。


[〜#〜] update [〜#〜]わかりました。したがって、当初考えていたよりも少し複雑になるかもしれません。私の実際のコードでは、node.js GLOBALオブジェクトで!==を使用していました。

console.log('Global User: ' + GLOBAL.User);

if (GLOBAL.User != null)
{
    console.log('User is not null');
}

GLOBAL.Userがnullの場合でも、コンソール行は印刷されます...

おそらくこのオブジェクトは特別ですか?



更新2

OK、コメントを読んでコードを見て、オブジェクトがnullではなく未定義の場合、!==に問題があることがわかりました(この投稿を参照してください: なぜnullはオブジェクトで、違いは何ですか?ヌルと未定義の間? )。

したがって、私の場合、このメソッドが呼び出されるタイミングに応じて、グローバル変数は未定義、null、またはデータでいっぱいになります。コードが未定義にならないように戻ってコードを更新し、!==が一貫して機能するようにします。

助けてくれてありがとう!


ありがとう、デビッド

26
David

global.Userundefinedではなく、nullです。 ==を使用する場合、それらは等しいと評価されますが、===を使用する場合、比較するアイテムは同じタイプである必要があります。 undefinedの型はundefinedであり、nullの型はobjectです。

undefinednullは非常に似ていますが、一般に2つの非常に異なるものを意味します。通常、undefinedは何かに値が割り当てられていない場合の結果ですが、nullには値があり、値は明示的に「nothing」に設定されます。

33
loganfsmyth

JavaScriptでそれ自体と等しくない唯一の値はNaNです。 null === nullfalseであり、JavaScriptエンジンに重大な問題があります;)

条件ステートメントが適切に記述されていることを確認するには、常に中括弧を使用します。

var x = null;
if (x !== null) {
    console.log('x is not equal to null');
}
12
plalx

さらに簡単です

var x = null;
    if (x) 6 
    if (!x) 7

結果は

undefined
7
4
oshribr