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

Shi*_*Lee 2 javascript

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

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

var t = 2;
var d = 2;
t + (d && 1 || 0) // logs 3
t + d && 1 || 0 // logs 1
Run Code Online (Sandbox Code Playgroud)

NaC*_*aCl 8

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

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

  1. 2 + (2 && 1 || 0)2 + (1 || 0)2 + 13
  2. 2 + 2 && 1 || 04 && 1 || 01 || 01

注意:除了零的任何数变成true转换时在JavaScript为布尔值和true本身变得1转换回为数值表示的时候.这就是为什么只要不为零a && b就会屈服ba

  • 如果`a`是真的,`a && b`返回`b`.所以'4 && 1 || 0`变为`1 || 0`,而不是'true || 0` (2认同)