为何JavaScript中变量赋值的运算符优先级表现反常?
关于
*=复合赋值运算符的运算逻辑解析 你对*=复合赋值运算符的理解存在偏差,它并不是简单将y *= 3+4拆解为y = y*3 +4,而是遵循先计算右侧整个表达式,再与左侧变量执行乘法运算的规则。
具体来说,所有复合赋值运算符(包括*=、+=、-=等)的通用逻辑是:x op= y 等价于 x = x op (y)——这里的括号是隐含生效的,会优先把右侧的完整表达式计算出结果,再和左侧变量执行op对应的运算。
回到你的代码:
let y = 2; y *= 3+4;
实际执行流程是:
- 先计算右侧的
3+4,得到结果7; - 再用左侧的
y(值为2)乘以这个结果,即2*7=14; - 最后把14赋值给
y。
你之前错误地将复合赋值拆成了普通表达式,混淆了运算符优先级和复合赋值的运算逻辑。运算符优先级是在单一表达式内的运算顺序,但复合赋值的规则是先锁定右侧整个表达式的结果,再完成赋值运算,所以不会出现y*3+4的拆分方式。
内容的提问来源于stack exchange,提问作者user2613946
相关产品推荐
相关产品推荐

