为什么输出是 16 而不是 11?

Why is the output 16 and not 11?

我正在学习 javascript 并且遇到了以下示例,

let n = 2;

n *= 3 + 5;

console.log( n ); 

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

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

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

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

它基于优先级和顺序

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

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

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