読者です 読者をやめる 読者になる 読者になる

等価演算子と厳密等価演算子 in ECMA-262 3rd Edition

JavaScript

高速化 - latest log
等価演算子(==)と厳密等価演算子(===) - ?D of K
について。

等価演算子と厳密等価演算子はどちらが高速か。もちろんケースバイケースではありますが、どちらかといえば厳密等価演算子が有利です。

というのも、ECMA-262 3rd Editionに抽象的等価比較アルゴリズム厳密等価比較アルゴリズムがあります。このアルゴリズムにおいて少ないステップで値を返すケースは、高速に比較を終えることになります。(と期待できますくらいのほうが良いかな。。)

特に注目すべきは厳密等価比較アルゴリズムで、ステップ1で型を調べてその型が一致しなければそこで false を返します。このため、型の異なる演算では厳密等価演算子が有利になります。

http://ss-o.net/test/js.html ( id:ofk さんのサンプルを改造)

抽象的等価比較 String == Number
27
厳密等価比較 String === Number
10
抽象的等価比較 Object == Number
113
厳密等価比較 Object === Number
10

特にObjectとNumber,Stringなどのプリミティブ値の比較では顕著に違いが出ます。*1
これはObjectをプリミティブ値に変換する処理が入るためと思われます。Object同士の場合は参照を見るので変換処理がはいりません。そのため、あまり差が出ていないようです。


最後に、NumberやStringなどのプリミティブ値同士の演算はほとんど差がでません。

抽象的等価比較 Number == Number
1
厳密等価比較 Number === Number
1

これは型が同じで、お互いにプリミティブ値だった場合のアルゴリズムが全く*2ほぼ同じだからです。

*1:といっても、体感できるほどの差はでませんが

*2:全くは言い過ぎかな