Me gustaría saber si JavaScript tiene una evaluación de "cortocircuito" como && Operator en C #. Si no es así, me gustaría saber si existe una solución alternativa que tenga sentido adoptar.
javascript
short-circuiting
GibboK
fuente
fuente
https://www.google.com/search?q=site:stackoverflow.com+%s
como un atajo de búsqueda (Chrome / Firefox) para acelerar las búsquedas.Respuestas:
Sí, JavaScript tiene evaluación de "cortocircuito".
Demo en vivo
Demo en vivo
fuente
Short-circuit
con ese operador lógico. Pruébelo usted mismo. Usa mi demo.Esta respuesta entra en gran detalle sobre cómo cortocircuitofunciona en JavaScript, con todos los problemas y también temas relevantes como la precedencia del operador, si está buscando una definición rápida y ya comprende cómo funciona el cortocircuito, recomendaría verificar otras respuestas.
Lo que (pensamos) sabíamos hasta ahora:
Primero, inspeccionemos el comportamiento con el que todos estamos familiarizados, dentro del
if()
bloque, donde usamos&&
para verificar si las dos cosas sontrue
:Ahora, su primer instinto probablemente sea decir: 'Ah sí, bastante simple, el código ejecuta la declaración si ambos
expr1
yexpr2
se evalúan comotrue
'Bueno, sí y no. Es técnicamente correcto, ese es el comportamiento que describió, pero no es exactamente así como se evalúa el código y tendremos que profundizar más para comprenderlo completamente.
¿Cómo se interpreta exactamente
&&
y||
?:Es hora de mirar "bajo el capó del javascript motor ". Consideremos este ejemplo práctico:
Bueno, el resultado es
260
... pero ¿por qué? Para obtener la respuesta, debemos comprender cómo funciona la evaluación de cortocircuito.Esto significa que, en nuestro ejemplo práctico,
const res
se evalúa de la siguiente manera:expr1
-sanitise(0xFF)
0xFF
es un número hexadecimal válido para 250, de lo contrario devolveríaNaN
expr1
devolvió un valor "verdadero", tiempo para ejecutarexpr2
(de lo contrario, me detendría comoNaN
es falso)userinput
es Truthy (un número), puedo añadir+5
a ellaAsí que aquí pudimos evitar
if
bloqueos adicionales yisNaN
verificaciones adicionales con un simple uso del&&
operador.Cómo funciona realmente:
A estas alturas, al menos deberíamos tener una idea de cómo cortocircuitolos operadores trabajan. La regla universal es:
(some falsy expression) && expr
evaluará a una expresión falsa(some truthy expression) || expr
evaluará a la expresión verazAquí hay algunos ejemplos adicionales para una mejor comprensión:
Una última cosa molesta, pero muy importante [precedencia del operador]:
Bien, ¡espero que lo estés entendiendo! Lo último que necesitamos saber es una regla sobre la precedencia de los operadores, es decir:
&&
operador siempre se ejecuta antes que el||
operador.Considere el siguiente ejemplo:
Esto volverá como, quizás confuso para algunos como
a()
. La razón es bastante simple, es solo nuestra vista lo que nos engaña, porque estamos acostumbrados a leer de izquierda a derecha. Saquemos elconsole.log()
y lo que no y centrémonos únicamente en la evaluaciónAhora, para entender esto:
Dijimos que el
&&
operador tiene precedencia, por lo que se evalúa como el primero. Para ayudarnos a imaginar mejor la evaluación, piense en la definiciónDónde:
expr2
esfalse
expr1
estrue || false
Así que esa fue la parte complicada, ahora
true || false
se evalúa (elexpr1
lado izquierdo del&&
).||
operador detiene la ejecución siexpr1 || expr2
enexpr1
evalúa como Truthy, elexpr1
se ejecuta y se detiene la ejecución de código.El valor devuelto es
true
Bueno ... eso fue bastante complicado, todo debido a unas pocas reglas y semánticas extrañas. Pero recuerde, siempre puede escapar de la precedencia del operador con
()
, al igual que en matemáticasfuente
expr1
yexpr2
ocondition1
o lo que sea, eso es sólo confuso. Decida por uno, también podría introducir variables locales, por ejemplo.const expr1 = true; if(expr1 && ...)