2012-03-03 7 views
-1

は、私は現在変数がnullで、1と0を許可するかどうかをチェックする方法は?

if (oldValue) ... 

それはnullである場合oldValueでうまく動作しますが、私はtrueを期待するとき場合には、それはまたfalseを返し、0で次のコードを使用します。では、nullの値はどのようにチェックする必要がありますか?私は考えていた

私は期待したように動作しません。

+5

「oldValue!= null」が期待どおりに機能しないのはなぜですか?それは何をし、あなたは何を期待していますか? 'oldValue'にはどのような値がありますか? –

+1

本当に '0'の評価をしたいのなら、'!= null'はあなたにそれを与えます。 –

+0

「true」と「false」のどちらの値を受け入れますか? – kaj

答えて

3

あなたの許容値は01ある場合if文はのようになります、直接あなたの質問に答えるために:これは(私の意見では)値が許可される状態に最も明確な方法です

if (0 === oldValue || 1 === oldValue) { 
    ... 
} 

詳細の説明については以下を参照:


これはtruthyfalsy値に関係しています。

null0""undefinedNaNがそうであるように、これらはfalsy値と呼ばれ、falseに評価されます。

同様に、いくつかの値はtrueと評価されます。例えば、"a string","0"(空でない文字列「0」)、0(負の数値を含む)、ArraysおよびObject(空の文字列も含む)などの任意の数。これらはtruthy値です。

いくつかの予期しない結果があります。

"" == false  // true 
0 == false  // true 

しかし:あなたは常に恒等演算子===代わりの平等(==)を使用する必要があります。実際に

NaN == false // false 
null == false // false 

が。これにより、変数がどのような型(文字列、数値、オブジェクト)であることが予想されるか、そして例外的な状態が何であるかがわかります。

いくつかの例:あなたが入力フィールドから値を取得している場合は

  • それは常に文字列になります - 特殊なケースは、空の文字列です。偶然、これはfalsyの値です。
  • エレメントを数えていて、要素がない場合に特別な処理を行う必要がある場合は、特殊ケースは0です。偶然、これはfalsyの値です。
  • parseIntまたはparseFloatを使用して文字列から数値を解析する場合は、特殊ケースNaNisNaN()にチェック)を使用してください。偶然、これはfalsyの値です。
  • indexOfを使用して文字列内に部分文字列が含まれているかどうかを確認する場合は、0が有効なインデックスであるため、特殊ケースは-1です。これは、ないfalsy値であるが、著者がここでのポイントがある

falsyである)可能性が許容値0について知っている不明確であるため、if(str.indexOf(substr))は最も確かに間違っています:特殊なケースは通常よく定義されています。これを利用すると、ID演算子===を常に使用できます。 等価演算子==とfalsinessが一般的なバグの原因です。参考のため

"" === false // false 
0 === false  // false 
NaN === false // false 
null === false // false 
false === false // true (of course) 
NaN === NaN  // strange, but makes sense 
"a" === "a"  // yay! 
+0

-1実際にここで質問に答える代わりに、別のサイトにリンクする。あなたが答えたいなら、私は投票を削除します。 –

+1

ええと、他のすべての答えはどうなりましたか?私は単にそれらを参照として掲示していました。しかし私は私の質問を更新します。 – Halcyon

+2

他の回答は、質問が理にかなっていないことを認識したために自己削除されました。問題に投稿されたコードの最後の行は、すでにOPのニーズを満たしています。 –

0

短い答え:あなたは変数に値nullを持っていない、正確かどうかをテストしたい場合は、その後にコードを変更します。ただし

if (oldValue !== null) ... 

(、 oldValuenullではなくundefinedであるかどうかについて考える必要があります。別のケースである必要があります。

==/!====/!==の違いの詳細については、Frits van Campen's answerを参照してください。

関連する問題