programacion - ¿Tiene javascript operadores booleanos que no sean de corto circuito?
operadores logicos javascript html (4)
JavaScript TIENE una sola tubería ( |
, bit a bit) y operadores con un solo símbolo ( &
, bit a bit AND) que no tienen cortocircuito, pero nuevamente son bitwise, no lógicos.
En js
(f1() || f2())
no ejecutará f2
si f1
devuelve true
que generalmente es bueno, excepto cuando no lo es. ¿Hay una versión de ||
que no hace corto circuito
algo como
var or = function(f, g){var a = f(); var b = g(); return a||b;}
No, JavaScript no es como Java y los únicos operadores lógicos son los cortocircuitos
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Logical_Operators
Tal vez esto podría ayudarte:
| a | b | a && b | a * b | a || b | a + b |
|-------|-------|--------|-----------|--------|-----------|
| false | false | false | 0 | false | 0 |
| false | true | false | 0 | true | 1 |
| true | false | false | 0 | true | 1 |
| true | true | true | 1 | true | 2 |
| a | b | a && b | !!(a * b) | a || b | !!(a + b) |
|-------|-------|--------|-----------|--------|-----------|
| false | false | false | false | false | false |
| false | true | false | false | true | true |
| true | false | false | false | true | true |
| true | true | true | true | true | true |
Básicamente (a && b)
es un cortocircuito, mientras que !!(a + b)
no lo es y producen el mismo valor.
Podría usar bit a bit O siempre que sus funciones devuelvan valores booleanos (¿o eso realmente importaría?):
if (f1() | f2()) {
//...
}
Jugué con esto aquí: http://jsfiddle.net/sadkinson/E9eWD/1/
Si necesita f2 () para ejecutarse independientemente de si f1 () es verdadero o falso, simplemente debe llamarlo, devolver una variable booleana y usarla en su condicional. Es decir, use: if (f1 () || f2IsTrue)
De lo contrario, use una barra simple o una sola y como lo sugiere GregC.