Javascript速记-什么是'||';运算符是指在作业中使用时?

Javascript速记-什么是'||';运算符是指在作业中使用时?,javascript,Javascript,我刚看了一下,注意到下面一行javascript代码: hrs = (hrs - 12) || 12; 我的问题: “| |”运算符在 在作业中使用 在本例中,如果hrs-12=0,则代码将12分配给hrs(正如JavaScript所看到的,0=false) 更一般地说,如果前一个值的计算结果为0、空字符串、null、未定义等,它会将后一个值赋给变量。这意味着。也就是说,如果表达式的第一部分为false,则使用第二部分。Wikipedia对许多语言的语法进行了分析。如果hrs-12的计算结果为

我刚看了一下,注意到下面一行javascript代码:

hrs = (hrs - 12) || 12;
我的问题:

“| |”运算符在 在作业中使用


在本例中,如果hrs-12=0,则代码将12分配给hrs(正如JavaScript所看到的,0=false)


更一般地说,如果前一个值的计算结果为0、空字符串、null、未定义等,它会将后一个值赋给变量。

这意味着。也就是说,如果表达式的第一部分为false,则使用第二部分。Wikipedia对许多语言的语法进行了分析。

如果
hrs-12
的计算结果为
0
,那么此人希望
hrs
被分配
12
,因为
0
不合适

由于
0
的计算结果为false,表达式将变为
false | | 12
,在这种情况下,将选择
12
,因为它是真实的。

它始终表示相同的含义:逻辑或

这是使用类型转换的常见技巧。许多非布尔表达式的计算结果为false。与此相同:

hrs = (hrs-12)
if(!hrs){
    hrs = 12;
}
if()可以工作,因为0强制转换为false。它还用于处理未定义的变量:

function foo(optionalValue){
    var data = optionalValue || "Default value";
}
foo();
foo("My value");
它的意思是“如果表达式的前半部分为false,则使用后半部分。”


实际上在这个例子中,这意味着
hrs
将被设置为
hours-12
,除非
hours-12
为零,在这种情况下
hrs
将被设置为
12

这意味着如果hrs-12被计算为false(false,null,undefined,NaN,,,0),然后,12将被分配给hr。

更具体地说,如果hrs12@Casey:不是这样,ToBoolean on负数的结果为true,那么实际上,如果答案是这样的,那么它只会将12分配给
hrs-12=0
。@Casey:如果
hrs-12==0
(或者其他一些假值),那么它将是
12
。如果小于
0
,则认为该值为“真”,并且
hrs
将被分配负值。