Имеет ли значение порядок операндов при оценке равенства или идентичности в JavaScript?

Вопрос: имеет ли значение порядок операндов при оценке равенства или идентичности в JavaScript?

В коде это (0 == значение) быстрее или правильнее, чем (value == 0) ? (Обратите внимание, что этот вопрос одинаково справедлив для оператора идентичности, === .)

Поскольку и равенство, и операторы идентичности являются коммутативными, я не верю, что порядок операндов должен иметь значение для оценки производительности, если только левый литерал не имеет каких-либо преимуществ при вычислении самого алгоритма равенства. Единственная причина, по которой мне интересно, это то, что я недавно использовал Google Closure Compiler , чтобы свести к минимуму некоторый JavaScript, и заметил, что

if (array.length == 0 && typeof length === 'number') {

был скомпилирован в

] if (0 == b.length && "number" === typeof c) {.

В обоих выражениях равенства - одном свободном и одном строгом - закрытие изменило порядок моей оперы на противоположный. nds, поместив числовой литерал и строковый литерал слева от соответствующих выражений.

Это вызвало у меня любопытство.

Я прочитал раздел Операторы равенства спецификации языка ECMAScript 5.1 (раздел 11.9, стр.80–82) и обнаружил, что, хотя алгоритмы равенства начинают сначала с изучения левых операндов, нет никаких указаний на то, что быстрее или лучше использовать литерал в качестве этого операнда.

Есть ли что-нибудь в проверке типов в ECMAScript, что делает проверку литералов оптимальной? Может быть, это какая-то особенность оптимизации в компиляторе Closure? Или, возможно, деталь реализации в более старой версии алгоритма равенства ECMAScript, которая была аннулирована в этой новой версии спецификации?

5
задан piersadrian 21 January 2012 в 00:25
поделиться