javascript是否有非短路布尔运算符?

时间:2011-04-13 16:18:13

标签: javascript

在js

(f1() || f2())
如果f2返回f1

将不会执行true,这通常是一件好事,除非它不是。是否有||的版本不会短路?

类似

var or = function(f, g){var a = f(); var b = g(); return a||b;}

4 个答案:

答案 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()) {
    //...
}

我在这里玩过:http://jsfiddle.net/sadkinson/E9eWD/1/

答案 2 :(得分:2)

JavaScript DOES有单个管道(|,按位OR)和单个&符号运算符(&,按位AND),它们是非短路的,但它们又是按位的,不合逻辑的。

http://www.eecs.umich.edu/~bartlett/jsops.html

答案 3 :(得分:0)

如果你需要运行f2()而不管f1()是真还是假,你应该只是调用它,返回一个布尔变量,并在条件中使用它。也就是说,使用:     if(f1()|| f2IsTrue)

否则,请按照GregC的建议使用单条或单条和号。