我想在这里做算术。我这样做的原因是为了防止乱码if else检查,d有时为null或未定义。
但是下面的代码给了我一些意想不到的东西。谁能告诉我发生了什么?感谢。
var t = 2;
var d = 2;
t + (d && 1 || 0) // logs 3
t + d && 1 || 0 // logs 1
答案 0 :(得分:8)
运营商优先权。如果你执行t + (d && 1 || 0)
括号内的所有内容都会在从左到右添加之前被调用。
但是如果你做t + d && 1 || 0
,那么在这些逻辑运算符之前执行加法。
因此,更详细地说,让我们用它们的数值替换这些变量:
2 + (2 && 1 || 0)
变为2 + (1 || 0)
变为2 + 1
变为3
2 + 2 && 1 || 0
变为4 && 1 || 0
变为1 || 0
变为1
注意:除了零之外的任何数字在JavaScript中转换为布尔值时变为true
,而true
在转换回数字表示时变为1
。这就是为什么a && b
只要b
不为零就会产生a
的原因