Вопрос: имеет ли значение порядок операндов при оценке равенства или идентичности в 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, которая была аннулирована в этой новой версии спецификации?