Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有算术运算的javascript运算符给出了意外的结果_Javascript - Fatal编程技术网

带有算术运算的javascript运算符给出了意外的结果

带有算术运算的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操作,则加

我在这里试着做算术。我这样做的原因是为了防止混乱的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
操作,则加法将在这些逻辑运算符之前执行

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

  • 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
    之间转换的部分不正确。