Según la tabla de precedencia de operadores para JavaScript, puedo ver que && tiene mayor precedencia que || .
Entonces, para el siguiente fragmento de código:
let x, y; let z = 5 || (x = false) && (y = true); console.log(z); // 5 console.log(x); // undefined console.log(y); // undefined Pensé que && debería evaluarse primero y después de un cortocircuito para la parte && , a x se le asignaría el valor false . Y solo entonces, || se trataría de evaluar.
Pero, a partir de la salida de console.log , puedo ver claramente que ese no es el caso aquí.
¿Puede alguien ayudarme, por favor, qué me estoy perdiendo aquí?
Gracias por adelantado.
Cuál es la precedencia del operador de && de || significa es que esto:
let z = 5 || (x = false) && (y = true);se evalúa como:
let z = 5 || ((x = false) && (y = true));y no como
let z = (5 || (x = false)) && (y = true); No es algo que indique cuándo se evalúan los valores a cada lado de un operador. Eso lo hace la mecánica de cada operador individual. Por ejemplo, para || , se especifica aquí :
1. Let lref be the result of evaluating LogicalANDExpression. 2. Let lval be ? GetValue(lref). 3. Let lbool be ToBoolean(lval). 4. If lbool is false, return lval. 5. Let rref be the result of evaluating BitwiseORExpression. 6. Return ? GetValue(rref). Evalúa GetValue(lref) antes de que se ejecute GetValue(rref) .
En otras palabras, la precedencia del operador indica qué tokens se aplican a qué operador y en qué orden, pero no cómo/cuándo un operador determinado evalúa los valores en su lado izquierdo y derecho.