在 JavaScript 中
(f1() || f2())
f2
如果f1
返回则不会执行,true
这通常是一件好事,除非它不是。有||
没有不短路的版本?
就像是
var or = function(f, g){var a = f(); var b = g(); return a||b;}
在 JavaScript 中
(f1() || f2())
f2
如果f1
返回则不会执行,true
这通常是一件好事,除非它不是。有||
没有不短路的版本?
就像是
var or = function(f, g){var a = f(); var b = g(); return a||b;}
不,JavaScript 不像 Java,唯一的逻辑运算符是短路的
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Logical_Operators
也许这可以帮助你:
http://cdmckay.org/blog/2010/09/09/eager-boolean-operators-in-javascript/
| 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 |
基本上(a && b)
是短路,而!!(a + b)
不是,它们产生相同的值。
只要您的函数返回布尔值(或者这真的很重要吗?),您就可以使用按位或:
if (f1() | f2()) {
//...
}
我在这里玩过这个:http: //jsfiddle.net/sadkinson/E9eWD/1/
JavaScript 确实有非短路的单管道 ( |
, 按位 OR) 和单 & 运算符 ( , 按位 AND ),但同样它们是按位的,不合逻辑的。&
如果您需要 f2() 运行而不管 f1() 是真还是假,您应该简单地调用它,返回一个布尔变量,并在条件中使用它。也就是说,使用: if (f1() || f2IsTrue)
否则,请按照 GregC 的建议使用单条或单与号。