JavaScript の比較ではどの等価演算子 (== と ===) を使用する必要がありますか?
P粉023650014
2023-08-23 12:29:52
<p>JSLint を使用して JavaScript を探索しているのですが、<code>==</code> (2 つの等号) を <code>===</code> (3 つ) に置き換える多くの提案が返されます。 <code>if</code> ステートメント内で <code>idSele_UNVEHtype.value.length == 0</code> を比較するなどの操作を実行する場合は、等号) を使用します。 </p>
<p><code>==</code> を <code>===</code> に置き換えることにパフォーマンス上の利点はありますか? </p>
<p>多数の比較演算子があるため、パフォーマンスの改善は歓迎されます。 </p>
<p>型変換を行わない場合、<code>==</code> よりもパフォーマンスが向上しますか? </p>
==
演算子を使用します (Equal )使用
リーリー===
operator(Identity)これは、等価演算子
==
が型キャスト を行うためです。つまり、インタプリタは比較する前に暗黙的に値の変換を試行します。一方、 恒等演算子
===
は型強制を行わないため、比較時に値は変換されません。厳密等価演算子 (
リファレンス:
JavaScript チュートリアル: 比較演算子===
) は、型変換が実行されず、型が同じ、同等とみなされます。演算子は、必要な型変換の後で
が等しいかどうかを比較します。
=== 演算子は変換を実行しないため、2 つの値が同じ型でない場合、
=== は単に # を返します。 ##間違い## #。どちらも同じくらい速いです。Douglas Crockford の素晴らしい文章を引用します
JavaScript: 良い部分,
更新 一个>#@Casebash
のコメントと、オブジェクトに関する@Phillipe Laybaert の
。オブジェクトの場合、== と === は互いに同じように動作します (特殊な場合を除く)。 リーリー 特別なケースは、
StringtoString
またはvalueOf
メソッドにより、プリミティブを同じプリミティブとして評価されるオブジェクトと比較する場合です。たとえば、文字列プリミティブを、コンストラクターを使用して作成された文字列オブジェクトと比較することを考えてみましょう。
===リーリー
Here==
演算子は両方のオブジェクトの値をチェックしてtrue
を返しますが、はそれらの型が異なることを確認して ## を返します# 間違い###。どちらが正しいか?それは何を比較するかによって異なります。私の提案は、この問題を完全に回避し、文字列リテラルから文字列オブジェクトを作成するために
String
コンストラクターを使用しないことです。######参照する######
https://262.ecma-international.org/5.1/#sec-11.9 .3