可能重复:
|| 是什么 运营商呢?
也许有人可以提供更好的代码片段,但以下是什么||
意思?:
var time = $(el).data('start') || new Date();
它是一个or
运算符吗?如果是,一个变量可以有两个不同的值有什么意义?
可能重复:
|| 是什么 运营商呢?
也许有人可以提供更好的代码片段,但以下是什么||
意思?:
var time = $(el).data('start') || new Date();
它是一个or
运算符吗?如果是,一个变量可以有两个不同的值有什么意义?
这是一个OR
运算符。你需要了解的是:
在逻辑运算符中使用时,非布尔值将转换为布尔值。转换成false
的值称为“假”,转换成true
的值称为“真”。虚假值包括0
、undefined
、null
等。更多内容请参见Truthy and Falsy: When All is Not Equal in JavaScript。
OR
运算符短路:它不断评估表达式,直到找到 is true
,然后停止。
因此,var time = $(el).data('start') || new Date();
意味着“设置time
为元素的start
数据el
,或者,如果那是虚假的,则使用当前时间”。
exp1 || exp2
评估 exp1。如果 exp1 为真,则不评估 exp2(称为短路评估)。如果 exp1 返回 false,则计算 exp 2。如果 exp1 OR exp2 为真,则 (exp1||exp2) 评估为真。
但在 Javascript 中,您可以使用运算符设置值。
a = something
if (prop)
a = prop
可以改写为
a = prop || something
它的意思是“或”。在这种情况下,它将 的值分配给$(el).data('start')
变量time
,或者,如果该变量不存在或返回false
,则将其分配给从 返回的值new Date()
。或者,正如马洛沃里奥在评论中更清楚地指出的那样:
...如果
$(el).data('start')
为“假”(即未定义、空、0、假、空字符串或 NaN),则new Date()
计算并分配给time
.
逻辑运算符的重要方面:
逻辑运算符通常与布尔(逻辑)值一起使用;当它们存在时,它们返回一个布尔值。但是,&& 和 || 运算符实际上返回指定操作数之一的值,因此如果这些运算符与非布尔值一起使用,它们可能返回非布尔值。
参考:
运营商的方式|| 被评估的是,如果第一部分是真实的,它会返回它。如果第一部分是假的,则返回第二部分。因此,上述表达式等价于:
if ($(el).data('start')) {
time = $(el).data('start');
} else {
time = new Date();
}
这意味着logical sum
。var time = $(el).data('start') || new Date();
if $(el).data('start')
will have undefined
or false
value thentime
将从new Date
函数中获得价值。