在js
(f1() || f2())
如果f2
返回f1
,将不会执行true
,这通常是一件好事,除非它不是。是否有||
的版本不会短路?
类似
var or = function(f, g){var a = f(); var b = g(); return a||b;}
答案 0 :(得分:10)
不,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)
不是,它们会产生相同的值。
答案 1 :(得分:3)
只要您的函数返回布尔值(或者真的重要吗?),您可以使用按位OR:
if (f1() | f2()) {
//...
}
答案 2 :(得分:2)
JavaScript DOES有单个管道(|
,按位OR)和单个&符号运算符(&
,按位AND),它们是非短路的,但它们又是按位的,不合逻辑的。
答案 3 :(得分:0)
如果你需要运行f2()而不管f1()是真还是假,你应该只是调用它,返回一个布尔变量,并在条件中使用它。也就是说,使用: if(f1()|| f2IsTrue)
否则,请按照GregC的建议使用单条或单条和号。