0

重複の可能性:
JavaScript === vs == : どの「等号」演算子を使用しても問題ありませんか?

JavaScript で同じ型の 2 つのオペランドを同等に比較する場合、==orを使用===しても概念上の違いはありません。そのため、私の場合のように、JavaScript ファイルをリモートからダウンロードする必要がある場合、どちらの演算子が実際に高速なのか疑問に思っています。インターネットの場所。

厳密な等値演算子===は、多くのユーザー エージェントでより高速に実行される可能性がありますが、JavaScript ファイルを使用してネットワークに沿って伝送される非圧縮情報がさらに 8 ビット必要になります。

==たまたま、今日の平均的な CPU は、インターネット接続が 1 ビットを配信するよりも数百回の条件付きジャンプを実行する方がはるかに高速であるため、可能な場合は代わりに===および!=代わりに使用したいと考えてい!==ます。しかし、反対のことを勧めるブログをたくさん読んでいて、私は混乱しています。

私が見逃している重要な点はありますか?

4

4 に答える 4

1

Douglas CrockfordのJavascriptから引用すると:The Good Parts

JavaScriptには2セットの等式演算子があります:===と!==、そしてそれらの邪悪な双子==と!=。良いものはあなたが期待するように機能します。2つのオペランドが同じタイプで同じ値の場合、===はtrueを生成し、!==はfalseを生成します。悪の双子は、オペランドが同じタイプの場合は正しいことを行いますが、異なるタイプの場合は、値を強制しようとします。彼らがそれを行うための規則は複雑で記憶に残るものではありません...推移性の欠如は憂慮すべきです。私のアドバイスは、邪悪な双子を決して使わないことです。代わりに、常に===と!==を使用してください。

性能の違いがあろうとなかろうと、「邪悪な双子」の使用を正当化するのは難しいでしょう。

于 2012-04-21T14:48:01.013 に答える
1

あなたが言うように、両方のオペランドが同じ型であることが保証されている比較では、2 つの演算子はまったく同じ手順を実行するように指定されており、コンパイラの最適化を除けば、ほぼ同じように実行される可能性があります。==したがって、これらの場合にoverを使用すると、ファイル サイズの点でわずかに有利になります===

ただし、一貫性がより重要であると主張する人もいます。===通常、同等性をテストするときに意図したものに近く、 and のみを使用する===と、!==多くの人が役に立ち、読みやすくなります。個人的には、私は反対のルールを持っており===、オペランドの型について不確実性がある場合にのみ使用しますが、どちらの方法もお勧めしません.

厳密な等価性と非厳密な等価性の違いを理解しており、and を使用しても、将来コードを読んだり理解したりする上で問題が発生することはない==と確信している場合は、それらを使用してください。!=

于 2012-04-21T14:37:40.470 に答える
1

おそらく、どちらか一方を推奨するブログは、速度のためではなく、類似の操作との論理的な一貫性のためにそうしています。スクリプトから個々の文字を削り取るところまで Javascript プログラムをトリミングしようとするのは賢明ではありません。サービスを提供する前に縮小化または別の自動化ツールを使用して実行することは 1 つのことですが、最小ファイル サイズまたは個々のオペランド レベルでの実行速度のために Javascript を手動で調整することは、サイトの維持をより困難にする終わりのない、報われないタスクです。

2 年後にこの一連の質問を覚えていなくても混乱しないように、より論理的に意味のあるオペランドを使用してください。

于 2012-04-21T14:38:05.853 に答える
1
var test="1";
console.log(test==1); // true
console.log(test===1); // false

==test に 1 がある===かどうかをチェックしますが、test に 1 があるかどうかをチェックし、そのデータ型もチェックします。その場合、データ型は文字列 (テストは文字列) ですが、右側のオペランドは文字列ではないため、2 番目の式は false です。次のテストは異なります

var test=1;
console.log(test==1); // true
console.log(test===1);​ // true

test にはtrue とInteger評価される 1 が含まれているためBoolean、右側のオペランドも同じです。===また、両方のオペランドが型であるかどうかもチェックします。

于 2012-04-21T14:38:22.980 に答える