使用算术的javascript运算符会产生意想不到的结果

时间:2015-08-22 16:34:02

标签: javascript

我想在这里做算术。我这样做的原因是为了防止乱码if else检查,d有时为null或未定义。

但是下面的代码给了我一些意想不到的东西。谁能告诉我发生了什么?感谢。

var t = 2;
var d = 2;
t + (d && 1 || 0) // logs 3
t + d && 1 || 0 // logs 1

1 个答案:

答案 0 :(得分:8)

运营商优先权。如果你执行t + (d && 1 || 0)括号内的所有内容都会在从左到右添加之前被调用。 但是如果你做t + d && 1 || 0,那么在这些逻辑运算符之前执行加法。

因此,更详细地说,让我们用它们的数值替换这些变量:

  1. 2 + (2 && 1 || 0)变为2 + (1 || 0)变为2 + 1变为3
  2. 2 + 2 && 1 || 0变为4 && 1 || 0变为1 || 0变为1
  3. 注意:除了零之外的任何数字在JavaScript中转换为布尔值时变为true,而true在转换回数字表示时变为1。这就是为什么a && b只要b不为零就会产生a的原因