2013-04-25 14 views
18

node.jsアプリケーションで作業しているときに、私のSublimeエディタにLinterをインストールしました。それがキャッチしたことの1つは、オブジェクトをnullと比較するために私は常に使用すべきです(私は通常!=を使用します)。Javascript:nullと比較する - !== vs!=

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

私はこのシナリオを持っている:!

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

私が使用する==コンソールが、それは明らかに真実ではなかったにもかかわらず、その行を印刷。私はそれを元に戻しました!=それは正常に動作しました。

だから私の質問は、なぜリンターを使用するように私に言っている、ある!==それは、私はそれがやりたいしない場合は...

私は何かが欠けています知っています。 [OK]を


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ではなく、定義されていない場合==は問題を抱えていることができます(この記事を参照:Why is null an object and what's the difference between null and undefined?)。

私の場合、グローバル変数は、このメソッドがいつ呼び出されるか、定義されていないか、ヌルか、データがいっぱいかによって異なります。私は戻って自分のコードを更新して決して定義されないようにして、!==が一貫して動作するようにします。

ありがとうございました!


おかげで、 デビッド

+2

ある

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

もっと簡単です(http://jsfiddle.net/zA4Du/) – 0x499602D2

+0

あなたの実験を繰り返すことができません。あなたのコードを実行すると、私のx === null。 null == undefinedがtrueであることに注意してください。 null ===未定義はfalseです。 JavaScriptは楽しいです! –

+0

も参照してください。http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-compared-to-undefined – mrk

答えて

20

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

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

+0

だから...場合によってはオブジェクトが未定義またはnullのどちらかになる可能性があります===ではなく==を使用する方が安全ですか? – David

+4

@David一般的に私はあいまいさを避け、 'null'に初期化されていることを確認します。どのような状況でも、考慮する必要があるいくつかの要因があるほど、問題についての理由が簡単になります。 – loganfsmyth

10

JavaScriptで自分自身と等しくない値だけがNaNです。 null === nullfalseの場合はJavaScriptエンジンに重大な問題があります)

条件文がよく書かれていることを確認するには、常に中カッコを使用してください。あなたのglobal.User

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

[私のために動作します。]結果は

undefined 
7 
関連する問題