You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中使用*=运算结果为何是16而非11?

核心原因:运算符优先级和复合赋值运算符的规则

你遇到的结果差异本质是对JS运算符优先级和*=复合赋值运算符的运算规则理解有偏差,具体逻辑如下:

  • 运算符优先级规则
    JavaScript中,加法运算符+的优先级远高于复合赋值类运算符(包括*=、+=、-=等)。所以在执行n *= 3 + 5时,会优先计算优先级更高的加法部分,先得到3 + 5 = 8,再执行*=的运算逻辑。
  • 复合赋值运算符的展开规则
    *=这类复合赋值运算符,默认会将右侧的整个计算结果作为运算的右值,也就是说:
    变量 *= 右侧表达式 完全等价于 变量 = 变量 * (右侧所有表达式的运算结果),而不是直接把*=拆成*和=按从左到右的顺序运算。
  • 实际运算过程拆解
let n = 2;
n *= 3 + 5;
// 实际执行顺序:
// 第一步:计算右侧高优先级的加法 3 +5 = 8
// 第二步:展开复合赋值运算 n = n * 8 = 2 *8 =16
console.log(n); // 输出16

你之前理解的n = n *3 +5,是假设*=的优先级高于+才会得到的结果,不符合JS的运算符优先级规则,所以才会出现预期和实际结果不符的情况。
如果你想要得到11的结果,可以主动通过括号调整优先级,写成n = n *3 +5,或者分开执行两次赋值:n *=3; n +=5即可。

内容的提问来源于stack exchange,提问作者CypherZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:39:02