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

tim*_*son 19 javascript operators

可能重复:
什么是|| 操作员呢?

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

var time =  $(el).data('start') || new Date();
Run Code Online (Sandbox Code Playgroud)

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

aps*_*ers 41

这是一个OR运营商.你需要了解的是:

  • 在逻辑运算符中使用时,非布尔值将转换为布尔值.转换为的值false称为"falsy",转换为的值true称为"truthy".Falsy值包括像0,undefined,null,等等.在Truthy和Falsy中查看更多内容:JavaScript中的所有内容均不相同.

  • OR运营商短路:它使计算表达式,直到它发现是true,然后停止.

所以,var time = $(el).data('start') || new Date();意思是"设置time为元素的start数据el,或者,如果那是假的,则使用当前时间".


Dav*_*mas 5

它的意思是'或'.在这个实例中,它将值赋给$(el).data('start')变量,time或者,如果该变量不存在或者返回false,则它将指定返回的值new Date().或者,Malovolio在评论中更清楚地注意到:

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

逻辑运算符的重要方面:

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

参考文献:


K2x*_*2xL 5

exp1 || exp2 
Run Code Online (Sandbox Code Playgroud)

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

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

a = something

if (prop)

a = prop
Run Code Online (Sandbox Code Playgroud)

可以改写为

a = prop || something
Run Code Online (Sandbox Code Playgroud)