Describa también por qué esta declaración se ejecuta de esa manera.
Estoy confundido porque el operador < tiene mayor prioridad en la siguiente declaración. Después de la ejecución de x > 0 , la ejecución debería ir por el operador && pero no se está ejecutando. Así que estoy confundido acerca de cuál es el orden de ejecución y por qué se ejecuta de esa manera.
¡Gracias por tu tiempo!
El código es el siguiente:
let x = 1; x > 0 || alert() && "hii"Si echas un vistazo a la precedencia de los operadores .
> tiene la máxima prioridad&& es el siguiente por prioridad|| es el siguiente por prioridadEntonces la expresión se ejecuta como:
(x > 0) || (alert() && "hii") En este caso x > 0 es true . Porque JavaScript || cortocircuitos si el primer operando es verdadero, el segundo operando no será evaluado.
Es como:
fun1() || func2() Si el valor de retorno de fun1() es verdadero, func2() no se ejecutará en absoluto.
No hay necesidad de usar el lado derecho del || porque el lado izquierdo ya es verdadero, por lo que no importa cuál sea el lado derecho, no podría cambiar el resultado de todos modos (tanto true || true como true || false se evaluaría como true ). Por lo tanto, no es necesario evaluar nada más que x > 0 para obtener un resultado inequívoco, alert() && "hii" se omite y el valor de retorno es true (el resultado de x > 0 ). (Esto se llama cortocircuito o evaluación condicional.) Ver docs .
Si probaste esto:
let x = 1; x > 0 || alert() && false La salida sería true , esto se debe a que && se ejecuta antes que || operador, "hii" se evalúa como verdadero, por lo que esto lo confundió al pensar que algo andaba mal, ya que ( true || alert() && true dará el mismo resultado que true || (alert() && true) .