【问题标题】:Why is the output 16 and not 11?为什么输出是 16 而不是 11?
【发布时间】:2021-11-03 15:47:10
【问题描述】:

我在学习 javascript 时遇到了以下示例,

let n = 2;

n *= 3 + 5;

console.log( n ); 

由于我们在表达式中使用了“*=”,我认为表达式应该是 n = n * 3+5。如果表达式是 n = n * 3+5 那么我们不应该得到 11 吗?我得到16作为答案。有人可以解释一下为什么答案是 16 而不是 11 吗?

【问题讨论】:

  • * 的优先级高于+ 是正确的;但*= 的优先级低于+。根据经验,其中包含符号= 的运算符的优先级低于没有符号的运算符。但是,在这种特殊情况下,我认为用括号编写 n *= (3 + 5); 会更优雅。尽管括号是多余的且不是必需的,但它们使人类更容易阅读。

标签: javascript math operators integer-arithmetic


【解决方案1】:

因为它遵循操作的顺序。 +*= 具有更高的优先级,所以如果我们在语句中添加括号以使其更清晰,它会是这样的:

let n = 2;
n *= (3 + 5)
// which means n = n * (3 + 5)
// which is n = n * 8

见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#table

【讨论】:

    【解决方案2】:

    嗯, 第二行有一个隐藏的括号,这意味着它必须看起来像这样 n*=(3+5) >> 8 然后 16

    【讨论】:

      【解决方案3】:

      它基于优先级和顺序

      1. /,*,% ---> 从左到右计算。

      2.+,- --->从左到右计算

      1. +=,-=,*=,/=,%=,&=,^=,|=,>>=, ---> 从右到左计算

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        相关资源
        最近更新 更多