只能操作一个值的操作符叫做一元操作符。
递增和递减操作符直接借鉴自C,有两个版本:前置型和后置型。
前置型:位于要操作的变量之前;
后置型:位于要操作的变量之后;
我们先来看一个例子:
var age = 30; ++age; //前置型递增操作符 alert(age); //31它等同于:
var age = 30; age = age + 1; alert(age); //31执行前置递减操作与上面类似:
var age = 30; --age; //前置型递减操作符 alert(age); //29请记住,执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的!
如:
var age = 30; var anotherAge = --age +1; alert(age); //29; alert(anotherAge); //30这个例子中变量 anotherAge 的初始值,等于变量 age 的值前置递减后, 再加1。由于先执行了减法操作, age 的值变成了29,所以再加上1,结果就是30。
另外,由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至右被求值。
如:
var num1 = 2; var num2 = 20; var sum1 = --num1 + num2; var sum2 = num1 + num2; alert(sum1); // 21 alert(sum2); // 21 alert(sum1==sum2); //true我们可以看出:
1、变量 sum1 的值之所以等于21,是因为 num1 先减去了1才与 num2 相加;
2、变量 sum2 的值也等于21,是因为 num1 的值已经变成 1 之后,再从左至右执行了加法操作后的值;
由此,我们可以总结一个规律,即:前置型,变量先执行递增和递减操作,它的值会立即改变!
后置型递增和递减操作符的语法不变(仍然是++和--),只不过要放在变量的后面。
如:
var age = 30; age++; // 后置型递增操作符 var num= 20; num--; // 后置型递减操作符请注意,后置型递增和递减与前置递增和递减有一个非常重要的区别,即:
后置型:递增和递减操作是在包含他们的语句被求值之后才执行的!
我们先来看一个例子:
var num1 = 1; var num2 = 1; ++num1; num2++; alert(num1); // 2 alert(num2); // 2 alert(num1 == num2); // true从上面的例子我们可以看出:
如果一条执行语句只存在前置型或后置型递增(也可以是递减)操作符,那么并不会改变这条操作语句的结果。
但是!
当语句中还包含其他操作时,上述的区别救会非常的明显了!
如:
var num1 = 2; var num2 = 20; var sum1 = num1-- + num2; // 等于22 var sun2 = num1 + num2; // 等于21出现这个问题的根源在于:
变量 sum1 的值,等于 num1 的原始值(2)再加上 num2 的值(20)求得的,在执行完这条执行语句后,递减操作才会执行(即,此时,变量 num1 的值为 1);
而变量 sum2 的值,是使用了 num1 递减后的值(1)再加上 num2 的值(20)求得的。
由此,我们可以再总结一个规律,即:后置型,变量先不变(先使用原始值),待执行语句完成后,再执行递增或递减操作!
综上所述,无论递增还是递减操作符,请一定牢记下面这两句话:
————以上知识点来源于《JavaScript高级程序设计(第三版)》
