目录
类似于 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