3

等式演算子()には多くの癖があることを私は知ってい==ます。たとえば、次のすべてが当てはまります...

null == undefined
1 == '1'
true == 1
false == ''

上記のすべての場合で、恒等演算子(===)を使用すると、(厳密に)正解が返されます。

しかし、癖に悩まされていない単純なものを比較したいだけの場合、なぜ等式演算子を使用すべきではありません。例えば...

typeof x == 'number'
str == 'something'

だから、私の質問は; 等式演算子がそのような蔑称的なステータスを持っているのはなぜですか。実際には、状況によっては便利です。

4

5 に答える 5

6

型強制と呼ばれるものがあるため、悪いと見なされます。

これはJavaScriptにあることを意味し"" == falseますtrueが、そうで"" === falseはありません。

それはあなたが望むものかもしれませんが、そうではないかもしれません。

これが常に悪い習慣であると言うことは、大げさな発言ではありません。それが何を意味するのかわからないのは悪いことです。

于 2012-10-15T11:08:12.650 に答える
3

==オペランドが同じ型であることが保証されている場合に使用しても、まったく問題はありません。オペランドが同じ型の場合、 とまったく同じ手順を実行するように指定されています===。良い例は、 を使用する場合typeofです。

==そのような状況で眉をひそめられる理由は、純粋にスタイル上のものです。===引数は、が一貫して使用されている場合、コードが読みやすいということです==。この多くは Douglas Crockford に端を発し、彼のJSLintツールによって永続化されています。

于 2012-10-15T11:17:12.797 に答える
0

戻り値の型が固定されている場合、1 つの例外のみ。

== を使用することで、同じ型で比較する場合、型規則は発生しません。

たとえば、typeof常に文字列を返します。

そのため、害を及ぼすことtypeof func == 'function'なく代わりに使用できます。typeof func === 'function'(これにより、1バイトが節約されます。)

于 2012-10-15T11:11:20.043 に答える
0

両方を使用すると、遅かれ早かれ間違いを犯し、使用==すべきでない場合に使用します。===それぞれの場合にorを使用する必要があるかどうかを決定するために必要な追加の脳サイクルは言うまでもありません==。固執し===て忘れる==と、エラーが発生しにくくなり、心に留めておくべきことが1つ少なくなります。

于 2012-10-15T11:14:23.660 に答える
0

また、それが何をするかを知っていれば、二重の等号が好まれる状況がある可能性があることも付け加えておく必要があります。F.ex を無効"0"にする必要がある場合は、次のようにします0

function validate(input) {
    return input == false;
}

validate(0); // false
validate("0") // false
于 2012-10-15T11:34:09.113 に答える