JavaScript中的自增和自减

  • Post author:
  • Post category:java



目录


++和–就是属于一元操作符


类似于 a+++a 这种式子,浏览器会自动将其扫描为: (a++)+a;


1.一元操作符:只操作一个变量的符号

++和–就是属于一元操作符

var a = 20;
++a;             
console.log(a);  //21

var b = 20;
b++;
console.log(b);  //21

var c = 10;
console.log(++c);   //先把变量c中的值加1变为11,再取c的值11打印
console.log(c);     //取c保存的值并打印11

var d = 10;
console.log(d++);    //取值,取d变量中保存的值10并打印,d变为11 ,但这里打印的是10
console.log(d);      //11
  

总结:如果单独写一行 ++a; 或者 a++;效果是一样的,像上面对变量a,b操作一样。

如果自增,自减结合其它代码写,就是要区分++在前和在后,像上面对变量c,d操作一样。


前置++(++c):就是先把变量保存的值修改了,再取修改后变量保存的值操作


后置++(d++):就是先取变量保存的值,再把变量保存的值进行加1后存入变量


无论前置还是后置,既有存值操作也有取值操作



eg: var a = 10; a++;

先取a变量中的值10,然后a的值+1变11后再存入进去。

eg:var a = 10;++a;

先把a值加1变为11存进a里面,再取出a的值11


–同上

//eg:
var a = 10;
a = (a++) + (++a);
console.log(a);

分析:1.(a++):先取出a的值10用,a再变为11 。所以(a++)整体得到的是 10

2.第1步a已经变为11,(++a):a的值先修改(加1)为12,再取出a的值12.所以(++a)整体得到的是12 ,此时a已经变为12

3.总的就是 10 + 12  结果为22


类似于 a+++a 这种式子,浏览器会自动将其扫描为: (a++)+a;

eg:一道+++的题

var obj = {
   age: 20
};
var a = 100;
var c = -a+++obj.age++;
console.log(c); 
console.log(obj.age);

分析:咋一看,+++什么鬼?再仔细一看,应该是:var c = – a++ + obj.age++;  这题要结合着运算符优先级来看,看表说话:

可以看到关于此题的优先级:. > ++ > + /-

也就是 1. obj.age 取值 20

2.a++  a取值100用,然后a的值变为101

3.obj.age++ 取值20用,然后 obj.age变为21

4.现在就是:var c = -100 + 20  所以console.log(c)结果为-80

eg:再看一道+++的题

var a=0.1,b=a+++a,c=a--+b;
console.log(a,b,c);

分析:

类似于 a+++a 这种式子,浏览器会自动将其扫描为: (a++)+a;



所以 b = a+++a;就是:b = (a++)+a;   a++整体结果:0.1  此时a =1.1 所以b = 1.2

所有 c = a–+b;  就是 c = (a–)+b; (a–)整体结果为:1.1,此时a = 0.1, 所以c =                    1.1+1.2=2.3

所有总的就是:a = 0.1,b=1.2,c = 2.3;

注意:因为精度问题,a,b,c后面都会有很多小数位。

eg:再看一道+++题

var a = 2;
var b = 3;
var c = (++a) + (b++) + b + (a++) - a;
console.log(c);

分析:优先级:()> ++ > +/-

var c = ++a +

b+++b

+ (a++) -a;  这种写法跟题目中的写法是一样的。

后面就不用说了吧,简单,结果为9



版权声明:本文为weixin_47075145原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。