JavaScript简写法 - 当在赋值中使用 '||' 运算符时,它的含义是什么?

17

我刚看了一下这个答案,发现以下的JavaScript代码行:

hrs = (hrs - 12) || 12;

我的问题:

在赋值语句中使用的 '||' 运算符是什么意思?

6个回答

12

在这种情况下,如果hrs-12 = 0(在JavaScript中,0 = false),则该代码将12分配给hrs。

更一般地说,如果前面的值计算为0、空字符串、null、undefined等,则它会将后面的值分配给变量。


更具体地说,如果 hrs12 <= 0,则会出现这种情况。我的意思是,谁知道最初如何设置 hrs? - Casey
2
@Casey: 不是这样的,ToBoolean 对负数的结果是 true,所以只有当 hrs-12 = 0 时它才会将12赋给 hrs,正如答案所说。 - Andy E
1
@Casey:只有当 hrs - 12 == 0(或其他假值)时,它才会是 12。如果它小于 0,它将被视为“真”,并且 hrs 将被赋予负值。 - user113716

7

它始终意味着相同的事情:逻辑或

这是一种常见的技巧,利用了类型转换。许多非布尔表达式会被求值为false。这与以下内容相同:

hrs = (hrs-12)
if(!hrs){
    hrs = 12;
}

if()的作用是0被转换为false。它也用于处理未定义的变量:

function foo(optionalValue){
    var data = optionalValue || "Default value";
}
foo();
foo("My value");

3
如果hrs-12的值为0,则需要将hrs赋值为12,因为0不合适。
由于0的值为假,表达式变成了false || 12,此时会选择12,因为它是真值。

2
这句话的意思是:“如果表达式的前半部分为假,则使用后半部分代替。”在这个例子中,实际上意味着,除非hours-12为零,否则将把hrs设置为hours-12,否则将把hrs设置为12

1

它意味着"短路或"。也就是说,如果表达式的第一部分为假,则使用第二部分。维基百科有一篇文章介绍了许多语言的语法。


1

这意味着如果 hrs - 12 的结果为 false(false、null、undefined、NaN、''、0),那么 12 将被赋值给 hrs。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接