关于一元操作符运算的理解(console.log(a++ + a-- + ++a + --a + a--))

现在直接给出一道笔试题,看各位是否能回答正确,如果回答正确,那可以看看分析是否是你所想的,如果没有回答正确,那么还是耐心的看下去吧,因为这种题也是笔试常考的题型。

上代码:

var a = 9;
var b = a++ + a-- + ++a + --a + a--;
console.log(a);
console.log(b);

可别小看这一道题,这道题里面涉及的js知识点还是很多的。

首先:要明白js运行代码的顺序:自上而下,从左往右;

然后:要明白递增和递减操作符是怎么运算的;

最后:要区别递增和递减。

按从左往右的顺序分析:

b = a++

即可理解为:

b = a;    //b=9
​a = a + 1;//a=10

b = a++ + a--

即可理解为:

b = a;    //b=9
​a = a + 1;//a=10
b = b + a;//b=19
a = a - 1;//a=9

b = a++ + a-- + ++a

即可理解为:

b = a;    //b=9
a = a + 1;//a=10
b = b + a;//b=19
a = a - 1;//a=9
a = a + 1;//a=10
b = b + a;//b=29  

b = a++ + a-- + ++a + --a

即可理解为:

b = a;    //b=9
​a = a + 1;//a=10
b = b + a;//b=19
a = a - 1;//a=9
a = a + 1;//a=10
b = b + a;//b=29
a = a - 1;//a=9
b = b + a;//38  

b = a++ + a-- + ++a + --a + a--;

即可理解为:

b = a;    //b=9
a = a + 1;//a=10
b = b + a;//b=19
a = a - 1;//a=9
a = a + 1;//a=10
b = b + a;//b=29
a = a - 1;//a=9
b = b + a;//38  
b = b + a;//47
a = a - 1;//8

所以最后b的正确答案为47,a的正确答案为8

2.为什么?

因为js执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的!执行后置递增和递减操作时,变量的值都是在语句被求值之后改变的!

所以执行a--或者a++时要在b求值之后变量a才会改变;执行--a或++a时,先求a的值之后再求b的值!

猜你喜欢

转载自blog.csdn.net/Charles_Tian/article/details/82423182
a--