在javascript中,对象值中的两条垂直线是什么意思?

时间:2012-05-05 14:59:14

标签: javascript operators

  

可能重复:
  What does the || operator do?

也许有人可以提供更好的代码段,但||在下面的含义是什么?:

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

它是or运算符,如果是这样,变量有两个不同的值有什么意义呢?

5 个答案:

答案 0 :(得分:40)

这是OR运算符。您需要了解的是:

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

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

因此,var time = $(el).data('start') || new Date();表示“将time设置为start元素的el数据,或者,如果这是假的,请使用当前时间”。

答案 1 :(得分:5)

这意味着'或'。在这种情况下,它会将$(el).data('start')的值分配给变量time,或者,如果该变量不存在或返回false,则会分配new Date()返回的值。或者,正如Malovolio在评论中更清楚地指出的那样:

  

...如果$(el).data('start')是“falsy”(即undefined,null,0,false,空字符串或NaN),则new Date()被评估并分配给{{1 }}

逻辑运算符的重要方面:

  

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

参考文献:

答案 2 :(得分:5)

exp1 || exp2 

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

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

a = something

if (prop)

a = prop

可以改写为

a = prop || something

答案 3 :(得分:1)

运营商的方式||评估的是,如果第一部分是true-ish,则返回它。如果第一部分是假的,则返回第二部分。 因此,上述表达式相当于:

if ($(el).data('start')) {
  time = $(el).data('start');
} else {
  time = new Date();
}

答案 4 :(得分:-1)

这意味着logical sumvar time = $(el).data('start') || new Date();如果$(el).data('start')的值为undefinedfalse,则time将具有new Date函数的值。