それでは、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、またはデータでいっぱいになります。コードが未定義にならないように戻ってコードを更新し、!==が一貫して機能するようにします。
助けてくれてありがとう!
ありがとう、デビッド
global.User
はundefined
ではなく、null
です。 ==
を使用する場合、それらは等しいと評価されますが、===
を使用する場合、比較するアイテムは同じタイプである必要があります。 undefined
の型はundefined
であり、null
の型はobject
です。
undefined
とnull
は非常に似ていますが、一般に2つの非常に異なるものを意味します。通常、undefined
は何かに値が割り当てられていない場合の結果ですが、null
には値があり、値は明示的に「nothing」に設定されます。
JavaScriptでそれ自体と等しくない唯一の値はNaN
です。 null === null
はfalse
であり、JavaScriptエンジンに重大な問題があります;)
条件ステートメントが適切に記述されていることを確認するには、常に中括弧を使用します。
var x = null;
if (x !== null) {
console.log('x is not equal to null');
}
さらに簡単です
var x = null;
if (x) 6
if (!x) 7
結果は
undefined
7