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+%scomo 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-circuitcon 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&¶ 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
expr1yexpr2se 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 resse evalúa de la siguiente manera:expr1-sanitise(0xFF)0xFFes un número hexadecimal válido para 250, de lo contrario devolveríaNaNexpr1devolvió un valor "verdadero", tiempo para ejecutarexpr2(de lo contrario, me detendría comoNaNes falso)userinputes Truthy (un número), puedo añadir+5a ellaAsí que aquí pudimos evitar
ifbloqueos adicionales yisNaNverificaciones 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) && exprevaluará a una expresión falsa(some truthy expression) || exprevaluará 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:
expr2esfalseexpr1estrue || falseAsí que esa fue la parte complicada, ahora
true || falsese evalúa (elexpr1lado izquierdo del&&).||operador detiene la ejecución siexpr1 || expr2enexpr1evalúa como Truthy, elexpr1se ejecuta y se detiene la ejecución de código.El valor devuelto es
trueBueno ... 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
expr1yexpr2ocondition1o 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 && ...)