JavaScript中的||是什么意思?

21

我正在查看这里的代码行:

    if (callback)
        callback(sig || graph);

我从来没有在JavaScript方法调用中看到过垂直的"或"符号。它们是什么意思?它们传递"true"参数(即sig或graph)吗?它们传递定义的参数吗?我以前从未见过这种语法。

6个回答

34
这是JS(和大多数其他语言)中的逻辑OR运算符。它在规范的11.11节中定义。如规范中所述,先评估两侧的表达式,逻辑OR按从左到右的结合顺序进行。请注意,操作数的评估遵循来自第9.2节的标准ToBoolean语义,因此[null, undefined, 0, '']都被视为假。
与大多数语言不同,如果左操作数为真,JS将返回左操作数,否则返回右操作数。这种行为以前已经在许多SO问题中涵盖,但值得注意的是,大多数语言只返回true或false。这种行为通常用于为未定义变量提供默认值

2
如果两者都是假值,它不会返回 false;它会返回右侧的值,无论它是什么(因此,可能是 0"")。 - Pointy
@Pointy 我的错误,已修复。 - ssube
与大多数语言不同,JS会返回左操作数如果它是真值,否则返回右操作数。这种方法在具有“真值”概念的脚本语言中非常常见,例如Python和Perl。即使Ruby也有这种行为,但它并不像JS那么有用(因为Ruby中几乎所有东西都是真值,所以必须将左侧强制转换为布尔值进行测试,这意味着这仅适用于从falsenil默认到另一个值,而不是从任意“falsy”对象(如0值、空序列等))。 - ShadowRanger

12

逻辑或运算符(||是一种运算符,根据第一个操作数是否为真,返回其第一个或第二个操作数。"真值"指的是除了 0undefinednull""false 之外的任何值。

这个运算符使用短路计算,意味着如果第一个表达式为真,那么第二个表达式不会被计算,而是立即返回第一个操作数。这类似于 逻辑与运算符(&&,它的作用相反:如果第一个操作数为假,则返回该操作数,否则返回第二个表达式。


有人可以解释一下我的答案哪里有问题,这样我就可以改进它吗? - David G
1
逻辑运算符并不总是返回布尔值。 - nderscore

3

它表示“或” (http://www.w3schools.com/js/js_comparisons.asp)。因此,如果(sig OR graph)。

注意:使用这个方法时需要小心,因为可能会使你的代码出现“短路”的情况。例如:

If (foo || foo2)

如果 foo 为真,那么 JavaScript 不会测试 foo2,它会直接跳过它。

1
它会通过任何被评估为真的条件,或者如果两个条件都为真,则通过sig

0

双竖线(||)在JS中表示OR。简单来说,要么这个条件成立,要么那个条件成立,才会得到一个True的结果。

例如:

var x = 8;

var y = 'c';

x >= 8 || y === 'a'

双竖线的左侧返回True,而右侧返回False。因此,结果是True


-2

运算符 || 表示或。

如果 sig 或 graph 为 true 或非空变量,则回调函数将接收一个 true 参数。


这不是 JavaScript 的工作方式,尽管对于其他一些语言(如 Java)是正确的。 - Pointy
我的错误。如果参数不是布尔值,回调函数将接受第一个非空(或未定义)参数。 - n.maia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接