は、私は現在変数がnullで、1と0を許可するかどうかをチェックする方法は?
if (oldValue) ...
それはnull
である場合oldValue
でうまく動作しますが、私はtrue
を期待するとき場合には、それはまたfalse
を返し、0で次のコードを使用します。では、null
の値はどのようにチェックする必要がありますか?私は考えていた
私は期待したように動作しません。
は、私は現在変数がnullで、1と0を許可するかどうかをチェックする方法は?
if (oldValue) ...
それはnull
である場合oldValue
でうまく動作しますが、私はtrue
を期待するとき場合には、それはまたfalse
を返し、0で次のコードを使用します。では、null
の値はどのようにチェックする必要がありますか?私は考えていた
私は期待したように動作しません。
あなたの許容値は0
と1
ある場合if
文はのようになります、直接あなたの質問に答えるために:これは(私の意見では)値が許可される状態に最も明確な方法です
if (0 === oldValue || 1 === oldValue) {
...
}
。
詳細の説明については以下を参照:
これはtruthyとfalsy値に関係しています。
null
は0
、""
、undefined
とNaN
がそうであるように、これらはfalsy値と呼ばれ、false
に評価されます。
同様に、いくつかの値はtrue
と評価されます。例えば、"a string"
,"0"
(空でない文字列「0」)、0
(負の数値を含む)、Array
sおよびObject
(空の文字列も含む)などの任意の数。これらはtruthy値です。
いくつかの予期しない結果があります。
"" == false // true
0 == false // true
しかし:あなたは常に恒等演算子===
代わりの平等(==
)を使用する必要があります。実際に
NaN == false // false
null == false // false
が。これにより、変数がどのような型(文字列、数値、オブジェクト)であることが予想されるか、そして例外的な状態が何であるかがわかります。
いくつかの例:あなたが入力フィールドから値を取得している場合は
0
です。偶然、これはfalsyの値です。parseInt
またはparseFloat
を使用して文字列から数値を解析する場合は、特殊ケースNaN
(isNaN()
にチェック)を使用してください。偶然、これは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!
-1実際にここで質問に答える代わりに、別のサイトにリンクする。あなたが答えたいなら、私は投票を削除します。 –
ええと、他のすべての答えはどうなりましたか?私は単にそれらを参照として掲示していました。しかし私は私の質問を更新します。 – Halcyon
他の回答は、質問が理にかなっていないことを認識したために自己削除されました。問題に投稿されたコードの最後の行は、すでにOPのニーズを満たしています。 –
短い答え:あなたは変数に値null
を持っていない、正確かどうかをテストしたい場合は、その後にコードを変更します。ただし
if (oldValue !== null) ...
(、 oldValue
がnull
ではなくundefined
であるかどうかについて考える必要があります。別のケースである必要があります。
==
/!=
と===
/!==
の違いの詳細については、Frits van Campen's answerを参照してください。
「oldValue!= null」が期待どおりに機能しないのはなぜですか?それは何をし、あなたは何を期待していますか? 'oldValue'にはどのような値がありますか? –
本当に '0'の評価をしたいのなら、'!= null'はあなたにそれを与えます。 –
「true」と「false」のどちらの値を受け入れますか? – kaj