为了账号安全,请及时绑定邮箱和手机立即绑定

data[i++] *= 2; data[i++] = data[i++] * 2; 区别

data[i++] *= 2; data[i++] = data[i++] * 2; 区别

weibo_瘗鹿鸣佐_0 2018-11-16 10:38:24
var data = [7,8,9]; var i = 0; data[i++] *= 2;数组data和i的值var data = [7,8,9]; var i = 0; data[i++] = data[i++] * 2;数组data和i的值又是多少有没有大佬帮忙解释下为啥第一个表达式结果> data[0] 14 > data[1] 8 > data[2] 9 > i 1第二个结果> data[0] 16 > data[1] 8 > data[2] 9 > i 2
查看完整描述

1 回答

?
pardon110

TA贡献1038条经验 获得超227个赞

相信你对第一个表达式结果没有任何疑问。关键在于第二个,本质是在js中[]运算符的优先级与.和()及.号同级属最高级别,而赋值及赋值运算符=是优先级倒数第二低的(最低级的是,逗号多重求值)。

明确[]运算符等级最高,在同级运算符中遵循从左往右计算,不同优先级,等级高的先执行

其次i++的问题,先取后算

比如i=0;打印 3+i++ 其结果是3,但接着打印i则值为1

分析

i=0;
data[i++]=data[i++]*2;
  1. []内运算最先执行,先做左侧[]后右侧[]

  2. 左侧取先第一次用i值为data[0],轮到右则[],会再次取i值,而此时i值为左侧i++计算后的值,即i为1

  3. 故作乘法运算时为data[0]  = data[1] *2

  4. 然后执行右侧乘法运算,将结果结data[0]

  5. 后续再打印i值时,i的结果是上自增后的值2


查看完整回答
1 反对 回复 2018-11-16
  • 1 回答
  • 1 关注
  • 2007 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信