快捷导航

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

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> i1第二个结果
> data[0]16> data[1]8> data[2]9> i2

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

相信你对第一个表达式结果没有任何疑问。关键在于第二个,本质是在js中[]运算符的优先级与.和()及.号同级属最高级别,而赋值及赋值运算符=是优先级倒数第二低的(最低级的是,逗号多重求值)。
明确[]运算符等级最高,在同级运算符中遵循从左往右计算,不同优先级,等级高的先执行
其次i++的问题,先取后算

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

分析
i=0;data[i++]=data[i++]*2;

  • []内运算最先执行,先做左侧[]后右侧[]

  • 左侧取先第一次用i值为data[0],轮到右则[],会再次取i值,而此时i值为左侧i++计算后的值,即i为1
  • 故作乘法运算时为data[0] = data[1] *2

  • 然后执行右侧乘法运算,将结果结data[0]
  • 后续再打印i值时,i的结果是上自增后的值2

回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP