いつものように同じですが、私は以下の見つけ以下のように書くことができますは、== Bいくつかの古いコードをリファクタリング= B
someVar != otherVar
ロジックがそうするようです。しかし、これはJavascriptなので、私は担保の問題を恐れているので、これは本当に大丈夫ですか?
いつものように同じですが、私は以下の見つけ以下のように書くことができますは、== Bいくつかの古いコードをリファクタリング= B
someVar != otherVar
ロジックがそうするようです。しかし、これはJavascriptなので、私は担保の問題を恐れているので、これは本当に大丈夫ですか?
実際には、それらのステートメントは非常に異なっています。 !aVar
は、そのvarをブール値に強制します。例えば'!0'
= true、'!1'
または他の数字はすべてfalseになります。 その他の例!''
= true !'abc
= false。
!=
は、タイプ変換に応じて非常に異なる結果をもたらす可能性がある寛大な(in)等価比較を行います。
5 != 6 //true
5 == !6 //false -> !6 is forced to a boolean (6=true,!6 = false), for the comparisson 5 is cast to a boolean (true), so the comparisson nets false
5 != 5 //false
5 == !5 //false, but because the same reason as above !5 becomes true, etc.
は、おそらくあなたが言及した古いコードは正確にotherVar
をboolifyingの理由のためにこれを使用しています。 someVarがすでにブール値である場合は、そうすることが理にかなっています。それ以外の場合はおそらく間違った結果になるでしょう。
私の恐怖は、varをキャスト/ブーファイリングする何らかの処理を行っていたことを正確に示していました。その場合、リファクタリングによってバグを導入する可能性があります。明確にしてくれてありがとう! – lucasarruda
答えはなしです。
Infinity == !NaN; // false
Infinity != NaN; // true
'abc' == !false; //false
'abc' != false; // true
コンソールを開いて自分で確認してください。もっと多くの例があります。
スニペットを使用してください - 人々に "自分自身をチェックする"ように指示するのは悪い習慣です。 – Amit
あなたは@Azamantesを手に入れました!たぶんエッジケースですが、間違いなく起こる可能性があります。 – lucasarruda
また、 '{}!= null'か' []!= null'か 'null!= false'、' 1!= Infinity'などについてはどうでしょうか? – adeneo
これらの変数の値のタイプ/範囲は何ですか? – Amit
@Amit通常はブール値ですが、必ずしもそうとは限らないので、私は尋ねています。彼らが文字列か何か違うと想像してみてください。 – lucasarruda
'someVar!= otherVar'は'!(someVar == otherVar) 'と等価ですが、その他は' otherVar'に依存します。 – Bergi