22

可能重复:
|| 是什么 运营商呢?

也许有人可以提供更好的代码片段,但以下是什么||意思?:

var time =  $(el).data('start') || new Date();

它是一个or运算符吗?如果是,一个变量可以有两个不同的值有什么意义?

4

5 回答 5

44

这是一个OR运算符。你需要了解的是:

  • 在逻辑运算符中使用时,非布尔值将转换为布尔值。转换成false的值称为“假”,转换成true的值称为“真”。虚假值包括0undefinednull等。更多内容请参见Truthy and Falsy: When All is Not Equal in JavaScript

  • OR运算符短路:它不断评估表达式,直到找到 is true,然后停止。

因此,var time = $(el).data('start') || new Date();意味着“设置time为元素的start数据el,或者,如果那是虚假的,则使用当前时间”。

于 2012-05-05T15:04:01.377 回答
7
exp1 || exp2 

评估 exp1。如果 exp1 为真,则不评估 exp2(称为短路评估)。如果 exp1 返回 false,则计算 exp 2。如果 exp1 OR exp2 为真,则 (exp1||exp2) 评估为真。

但在 Javascript 中,您可以使用运算符设置值。

a = something

if (prop)

a = prop

可以改写为

a = prop || something
于 2012-05-05T15:06:27.540 回答
5

它的意思是“或”。在这种情况下,它将 的值分配给$(el).data('start')变量time,或者,如果该变量不存在或返回false,则将其分配给从 返回的值new Date()。或者,正如马洛沃里奥在评论中更清楚地指出的那样:

...如果$(el).data('start')为“假”(即未定义、空、0、假、空字符串或 NaN),则new Date()计算并分配给time.

逻辑运算符的重要方面:

逻辑运算符通常与布尔(逻辑)值一起使用;当它们存在时,它们返回一个布尔值。但是,&& 和 || 运算符实际上返回指定操作数之一的值,因此如果这些运算符与非布尔值一起使用,它们可能返回非布尔值。

参考:

于 2012-05-05T15:01:04.507 回答
1

运营商的方式|| 被评估的是,如果第一部分是真实的,它会返回它。如果第一部分是假的,则返回第二部分。因此,上述表达式等价于:

if ($(el).data('start')) {
  time = $(el).data('start');
} else {
  time = new Date();
}
于 2012-05-05T15:06:14.153 回答
0

这意味着logical sumvar time = $(el).data('start') || new Date();if $(el).data('start')will have undefinedor falsevalue thentime将从new Date函数中获得价值。

于 2012-05-05T15:01:29.353 回答