Pregunta: ¿El orden de los operandos hace alguna diferencia al evaluar la igualdad o la identidad en JavaScript?¿El orden de los operandos hace alguna diferencia cuando se evalúa la igualdad o la identidad en JavaScript?
¿En el código, es (0 == value)
más rápido o más correcto que (value == 0)
? (Tenga en cuenta que esta pregunta es igualmente válida para el operador de identidad, ===
.)
Como los operadores de igualdad e identidad son conmutativos, no creo que el orden de los operandos deba hacer una diferencia en el rendimiento de la evaluación, a menos que exista alguna beneficio del literal del lado izquierdo en el cálculo del algoritmo de igualdad en sí. La única razón por la que pregunto es que recientemente he usado Closure Compiler de Google a reducirse algo de JavaScript, y se dio cuenta de que
if (array.length == 0 && typeof length === 'number') {
habían sido compilado a
if(0 == b.length && "number" === typeof c) {
.
En ambas expresiones de igualdad, una suelta y otra estricta, Closure ha invertido el orden de mis operandos, colocando un literal numérico y un literal de cadena en los lados izquierdos de sus respectivas expresiones.
Esto me hizo sentir curiosidad.
He leído a través de la sección Igualdad Operadores del ECMAScript 5.1 Language Specification (sección 11.9, pp. 80-82) y se encontró que mientras que los algoritmos de igualdad comienzan examinando los operandos de la mano izquierda en primer lugar, no hay ninguna indicación de que es más rápido o mejor usar un literal como ese operando.
¿Hay algo sobre la comprobación de tipos de ECMAScript que hace que el examen de literales sea óptimo? ¿Podría ser alguna peculiaridad de optimización en el compilador Closure? ¿O quizás un detalle de implementación en una versión anterior del algoritmo de igualdad de ECMAScript que ha sido anulado en esta nueva versión de la especificación?
creo que este "error" se presenta como un efecto secundario del modo en que Google analizadores y reconstruye el código y no tiene nada que ver con los efectos secundarios o su exactitud ni de orden de operando – Raynos
Para verificar la velocidad, simplemente ejecute pruebas en [JS Perf] (http://jsperf.com). Esto, por supuesto, solo medirá los navegadores que tenga disponibles ejecutando los casos de prueba que cree, en lugar de ofrecer una evaluación teórica/'objetiva'. –