7

出典: http://www.2ality.com/2011/12/strict-equality-exemptions.html

JavaScript には、2 つの値が等しいかどうかを判断するための 2 つの演算子があります。

  • 厳密な等価演算子 === は、同じ型を持つ等しい値のみを考慮します。
  • 「通常の」(または寛大な) 等価演算子 == は、厳密な等価のように比較する前に、異なる型の値を変換しようとします。

JavaScript の初心者へのアドバイスは、== を完全に忘れて、常に === を使用することです。

しかし、== 演算子を使用しない理由は何ですか? セキュリティリスクにつながるか?

しかし、typeof 演算子を使用すると、結果が文字列になることを確認できます。その場合、 == は安全に使用できます。これは、変換の悪ふざけが実行されないことを確認できるためです。

if (typeof x == "function") {
    ...
}
4

4 に答える 4

5

あなたの例のように、「変換シェナニガン」を行わないことが確実な場合は、パーサーが実行する必要があるかどうかを判断する労力を節約できるため、引き続き使用する===必要があります。変換。そのため、パフォーマンスが向上します。(限界ですが、それでも)

これはセキュリティに関するものではありません。それはパフォーマンスと正しい方法で物事を行うことです。

double equal を使用する必要があるのは、JavaScript の暗黙的な型変換を使用する必要があることが事前にわかっている場合だけです。これは、たとえば、入力フィールド (文字列) の数値をチェックする場合に当てはまります。しかし、それでも多くの場合、最初に値を手動で変換する方がよいでしょう。

===つまり、の暗黙的な変換機能が必要であることが確実でない限り、どこでもこの構文を使用してください==

于 2013-04-02T16:08:47.993 に答える
1

最初にあなたの質問を読んだとき、2 つのシナリオを考えました。

  1. ユーザーが入力した値を整数と比較する場合
  2. null は明示的に undefined と等しくないため、オブジェクトを null または undefined と比較する場合

しかし、私は少し読んで、これに出くわしました。これは、== を決して使用しないためのかなり強力なケースです。迅速な(そしておそらく厄介な)キャッチオールが必要な場合は==を使用しますが、明示的な比較を実装する方がおそらく良い方法です(そして少し余分な作業が必要です)。

于 2013-04-02T16:20:50.393 に答える
0

どちらも文字列になる場合は、=== を使用しない理由はありません。

== は、そのようなシナリオで「typeof」を使用するのを忘れる可能性があるため、お勧めしません。または、型を「自然に」比較できないことに単に気付かない可能性があります...もちろん、引き続き使用できます。ただし、実際に異なる型を比較し、それらの型で結果がいつ true/false になるかを理解する必要がある場合にのみ使用してください。

于 2013-04-02T16:05:35.570 に答える