猿问

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
> i
1

第二个结果

> data[0]
16
> data[1]
8
> data[2]
9
> i
2


weibo_瘗鹿鸣佐_0
浏览 2008回答 1
1回答

pardon110

相信你对第一个表达式结果没有任何疑问。关键在于第二个,本质是在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

相关分类

JavaScript
我要回答