質問:JavaScriptで等価性や同一性を評価する際にオペランドの順序が違いますか?JavaScriptで等価性や同一性を評価する際、オペランドの順序は何か違いはありますか?
コードでは、(0 == value)
は(value == 0)
より速く、正確ですか?の場合も同様です。この質問は、同一性のあるID演算子の場合はです。
等価演算子と識別演算子の両方が可換であるため、オペランドの順序が評価のパフォーマンスに影響しないとは思えません。等価アルゴリズム自体の計算において左辺のリテラルに利益をもたらす。私は疑問に思う唯一の理由は、私は最近、いくつかのJavaScriptを煮詰めるために、GoogleのClosure Compilerを使用し、
if (array.length == 0 && typeof length === 'number') {
が
if(0 == b.length && "number" === typeof c) {
にコンパイルされていたことに気づいたということです。
どちらの等価式でも、1つ緩いと1つの厳密な閉包が、それぞれの式の左側にNumberリテラルとStringリテラルを配置して、自分のオペランドの順序を逆にしました。
これは私を不思議に思った。
は私がECMAScript 5.1 Language Specification(セクション11.9、頁80-82)と平等アルゴリズムは最初の左側のオペランドを調べることによって開始している間、それは高速ですという兆候がないことがわかったかの平等演算子セクションを読んでそのオペランドとしてリテラルを使用する方がよいでしょう。
リテラルの最適な検査を行うECMAScriptのタイプチェックについては何かありますか? Closureコンパイラでいくつかの最適化が可能だろうか?あるいは、ECMAScriptの等価アルゴリズムの古いバージョンの実装の詳細は、この新しいバージョンの仕様では無効になっていますか?
が、私はこの「エラー」はどのようにGoogleのパーサの副作用として来て、あなたのコードを再構築し、副作用またはの正しいネスとは何の関係もないと思うエラーがスローされますオペランドの順序 – Raynos
スピードをチェックするには、[JS Perf](http://jsperf.com)でテストを実行します。これはもちろん、理論的/「客観的」評価を提供するのではなく、作成したテストケースを実行しているブラウザを測定するだけです。 –