带有算术运算的javascript运算符给出了意外的结果
我在这里试着做算术。我这样做的原因是为了防止混乱的if-else检查,并且d有时为null或未定义 然而,下面的代码给了我一些意想不到的东西。谁能告诉我发生了什么事?谢谢带有算术运算的javascript运算符给出了意外的结果,javascript,Javascript,我在这里试着做算术。我这样做的原因是为了防止混乱的if-else检查,并且d有时为null或未定义 然而,下面的代码给了我一些意想不到的东西。谁能告诉我发生了什么事?谢谢 var t = 2; var d = 2; t + (d && 1 || 0) // logs 3 t + d && 1 || 0 // logs 1 操作员优先。如果执行t+(d&&1 | | 0)在从左到右的加法之前,将调用括号内的所有内容。 但是如果执行t+d&&1 | | 0操作,则加
var t = 2;
var d = 2;
t + (d && 1 || 0) // logs 3
t + d && 1 || 0 // logs 1
操作员优先。如果执行
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
不是零时,a&&b
将屈服于b
,你在这里做什么算术?你期望得到什么样的结果?在第3行和第4行,你没有任何等号,所以结果没有意义。您能更具体地说明您正在尝试做什么,以及您得到了什么意外的结果吗?请检查JavaScript运算符优先级。好的,谢谢。如果a
是真的,则返回b
。所以4&&1 | | 0
变成1 | | 0
,而不是true | | 0
好吧,我想我错过了一些东西。。显然,+
是在右边的&&
之前计算出来的。@NaCl请根据@sheilak的评论编辑您的答案。有关在true
之间转换的部分不正确。