在这种情况下,如果hrs-12 = 0(在JavaScript中,0 = false),则该代码将12分配给hrs。
更一般地说,如果前面的值计算为0、空字符串、null、undefined等,则它会将后面的值分配给变量。
它始终意味着相同的事情:逻辑或
这是一种常见的技巧,利用了类型转换。许多非布尔表达式会被求值为false。这与以下内容相同:
hrs = (hrs-12)
if(!hrs){
hrs = 12;
}
if()的作用是0被转换为false。它也用于处理未定义的变量:
function foo(optionalValue){
var data = optionalValue || "Default value";
}
foo();
foo("My value");
hrs-12
的值为0
,则需要将hrs
赋值为12
,因为0
不合适。0
的值为假,表达式变成了false || 12
,此时会选择12
,因为它是真值。hours-12
为零,否则将把hrs
设置为hours-12
,否则将把hrs
设置为12
。这意味着如果 hrs - 12 的结果为 false(false、null、undefined、NaN、''、0),那么 12 将被赋值给 hrs。
hrs-12 = 0
时它才会将12赋给hrs
,正如答案所说。 - Andy Ehrs - 12 == 0
(或其他假值)时,它才会是12
。如果它小于0
,它将被视为“真”,并且hrs
将被赋予负值。 - user113716