只能操作一个值的操作符叫做一元操作符。
递增和递减操作符有前置型和后置型两个版本。从字面上看就识货,前置型应该位于要操作的变量之前。而后置型就是位于要操作的变量之后。如下例子:
var age = 24; ++age; // 25
等同于
var age = 24; age = age + 1;
执行前置递减操作的方法也类似,结果会将数值减去1。使用前置递减时,要把两个减号放在相应的变量前边,如:
var age = 24; --age; // 23
执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。
如下例:
var age = 24; var endAge = --age + 2; alert(age); // 23 alert(endAge); // 25
这个例子中,变量endAge的初始值等于变量age的值前置递减之后加2。因为先执行了减法操作,age的值变成了23,所以之后再加上2的结果就为25。
前置递增和递减操作与执行语句的优先级相等,执行顺序为从左到右求值。
如下例:
var num1 = 2; var num2 = 20; var num3 = --num1 + num2; // 21 var num4 = num1 + num2; // 21
后置型递增和递减操作符的语法不变,只不过要放在变量的后面。后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行的。
如下例:
var age = 24; age++; // 25
当递增是这条语句的唯一操作时,结果并不会有所改变。但是,当语句中包含的还有其他的操作时,上述区别就会非常明显。
var num1 = 2; var num2 = 20; var num3 = num1-- + num2; // 22 var num4 = num1 + num2; // 21
这时就可以看出明显的差别,根源在于这里计算num3时使用了num1的原始值 “2” 完成了计算,而num4则是使用了递减后的值 “1” 。
所有这 4 个操作符对任何值都适用,也就是它们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,递增和递减操作符遵循下列规则。
- 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作。字符串变量变成数值变量。
- 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为 NaN。字符串变量变成数值变量。
- 在应用于布尔值 false 时,先将其转换为 0 再执行加减 1 的操作。布尔值变量变成数值变量。
- 在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。
- 在应用于浮点数值时,执行加减 1 的操作。
- 在应用于对象时,先调用对象的 valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是 NaN,则在调用 toString()方法后再应用前述规则。对象变量变成数值变量。
如下例:
var a = "2"; var b = "z"; var c = false; var d = 1.1; var e = { valueOf: function() { return -1; } }; a++; // 3 b++; // NaN c++; // 1 d--; // 0.10000000000000009(由于浮点舍入错误所致) e--; // -2
一元加和减操作符,这两个 ECMAScript 操作符的作用与数学书上讲的完全一样。一元加操作符以一个加号表示,放在数值前面,对数值不会产生任何影响。
如下例:
var num = 24; num = +num; // 24
在对非数值应用一元加操作符时,该操作符会像 Number()转型函数一样对这个值执行转换。也就是说,布尔值 false 和 true 将被转换为 0 和 1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的 valueOf()和(或)toString()方法,再转换得到的值。
如下例:
var a = "01"; var b = "1.1"; var c = "z"; var d = false; var e = 1.1; var f = { valueOf: function() { return -1; } }; a = +a; // 1 b = +b; // 1.1 c = +c; // NaN d = +d; // 0 e = +e; // 1.1 f = +f; // -1
一元减操作符主要用于表示负数。
var a = "01"; var b = "1.1"; var c = "z"; var d = false; var e = 1.1; var f = { valueOf: function() { return -1; } }; a = -a; // -1 b = -b; // -1.1 c = -c; // NaN d = -d; // 0 e = -e; // -1.1 f = -f; // 1
> **学习随笔**