从两段代码说起
var num1=2;
var num2=20;
var num3=--num1+num2;
var num4=num1+num2;
console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4)
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;
var num4 = num1 + num2;
console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4)
递增运算符和递减运算符
我们都知道,JavaScript中的递增运算符是 ++,递减运算符是 --。简单来说,递增运算符就是将变量+1,递减运算符就是让变量-1,可是前置和后置结果是不一样的,也是很容易混淆的。
前置型递增(递减)
var a = 1;
var b = ++a;
console.log(a); //2
console.log(b); //2
上面的表达式也可以理解为:
var a = 1;
a = a + 1;
var b = a;
后置型递增(递减)
后置型简单理解就是先赋值再计算。例如
var a = 1;
var b = a++;
console.log(a); //2
console.log(b); //1
上面的表达式也可以理解为:
var a = 1;
var i = a;
a = a + 1;
var b = i;
原理
前置和后置型运算符之所以有上面的区别,是因为运算符的优先级。在各运算符按照优先级的不同由高到低排列顺序中:
后置型递增(递减)运算符的优先级是17
前置型递增(递减)运算符的优先级是16
赋值运算符=的优先级是3
所以,++和–会优先于=执行。
然后根据MDN上对递增(++)的解释:
如果后置(postfix)使用,即运算符位于操作数的后面(如 x++),那么将会在递增前返回数值。
如果前置(prefix)使用,即运算符位于操作数的前面(如 ++x),那么将会在递增后返回数值。
var a = 1;
console.log(a++) //1