1. 递增和递减操做符 递增和递减操做符直接借鉴自 C,并且各有两个版本:前置型和后置型。 ①顾名思义,前置型应该位于要操做的变量以前,然后置型则应该位于要操做的变量以后。所以,在使用前置递增操做符给一个数值加 1 时,要把两个加号(++)放在这个数值变量前面,以下所示:bash
var age = 29;
++age;
复制代码
在这个例子中,前置递增操做符把 age 的值变成了 30(为 29 加上了 1)。实际上,执行这个前置递增操做与执行如下操做的效果相同:ui
var age = 29;
age = age + 1;
复制代码
执行前置递减操做的方法也相似,结果会从一个数值中减去 1。使用前置递减操做符时,要把两个减号( -- )放在相应变量的前面,以下所示:spa
var age = 29;
--age;
复制代码
这样, age 变量的值就减小为 28(从 29 中减去了 1)。 执行前置递增和递减操做时,变量的值都是在语句被求值之前改变的。(在计算机科学领域,这种状况一般被称做副效应。)请看下面这个例子。code
var age = 29;
var anotherAge = --age + 2;//变量的age值都是在语句被求值之前改变的,机在这里 age=28
alert(age); // 输出 28
alert(anotherAge); // 输出 30
复制代码
这个例子中变量 anotherAge 的初始值等于变量 age 的值前置递减以后加 2。因为先执行了减法操做, age 的值变成了 28,因此再加上 2 的结果就是 30。 因为前置递增和递减操做与执行语句的优先级相等,所以整个语句会从左至右被求值。再看一个例子:htm
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; // 等于 21
var num4 = num1 + num2; // 等于 21
IncrementDecrementExample02.htm
复制代码
在这里, num3 之因此等于 21 是由于 num1 先减去了 1 才与 num2 相加。而变量 num4 也等于 21 是由于相应的加法操做使用了 num1 减去 1 以后的值。对象
②后置型递增和递减操做符的语法不变(仍然分别是 ++ 和 -- ),只不过要放在变量的后面而不是前面。后置递增和递减与前置递增和递减有一个很是重要的区别,即递增和递减操做是在包含它们的语句被求值以后才执行的。这个区别在某些状况下不是什么问题,例如:rem
var age = 29;
age++;
复制代码
把递增操做符放在变量后面并不会改变语句的结果,由于递增是这条语句的惟一操做。可是,当语句中还包含其余操做时,上述区别就会很是明显了。请看下面的例子:字符串
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; //等于22 递增和递减操做是在包含它们的语句被求值以后才执行的,即这里在num3被求值后,num1 = 1;
var num4 = num1 + num2; // 等于 21
IncrementDecrementExample03.htm
复制代码
这里仅仅将前置递减改为了后置递减,就当即能够看到差异。在前面使用前置递减的例子中, num3 和 num4 最后都等于 21。而在这个例子中, num3 等于 22, num4 等于 21。差异的根源在于,这里在计 算 num3 时使用了 num1 的原始值(2)完成了加法计算,而 num4 则使用了递减后的值(1)。 全部这 4 个操做符对任何值都适用,也就是它们不只适用于整数,还能够用于字符串、布尔值、浮 点数值和对象。在应用于不一样的值时,递增和递减操做符遵循下列规则。 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操做。字符串变量变成数值变量。 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN (第 4 章将详细讨论)。 字符串变量变成数值变量。 在应用于布尔值 false 时,先将其转换为 0 再执行加减 1 的操做。布尔值变量变成数值变量。 在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操做。布尔值变量变成数值变量。 在应用于浮点数值时,执行加减 1 的操做。 在应用于对象时,先调用对象的 valueOf() 方法(第 5 章将详细讨论)以取得一个可供操做的值。而后对该值应用前述规则。若是结果是 NaN ,则在调用 toString() 方法后再应用前述规则。对象变量变成数值变量。 如下示例展现了上面的一些规则:string
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1++; // 值变成数值 3
s2++; // 值变成 NaN
b++; // 值变成数值 1
f--; // 值变成 0.10000000000000009(因为浮点舍入错误所致)
o--; // 值变成数值-2
复制代码