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

为何JavaScript中变量赋值的运算符优先级表现反常?

关于*=复合赋值运算符的运算逻辑解析

你对*=复合赋值运算符的理解存在偏差,它并不是简单将y *= 3+4拆解为y = y*3 +4,而是遵循先计算右侧整个表达式,再与左侧变量执行乘法运算的规则。

具体来说,所有复合赋值运算符(包括*=、+=、-=等)的通用逻辑是:x op= y 等价于 x = x op (y)——这里的括号是隐含生效的,会优先把右侧的完整表达式计算出结果,再和左侧变量执行op对应的运算。

回到你的代码:

let y = 2;
y *= 3+4;

实际执行流程是:

  1. 先计算右侧的3+4,得到结果7;
  2. 再用左侧的y(值为2)乘以这个结果,即2*7=14;
  3. 最后把14赋值给y。

你之前错误地将复合赋值拆成了普通表达式,混淆了运算符优先级和复合赋值的运算逻辑。运算符优先级是在单一表达式内的运算顺序,但复合赋值的规则是先锁定右侧整个表达式的结果,再完成赋值运算,所以不会出现y*3+4的拆分方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:24:57