Skip to content

—元操作符 ​

本节目标:理解“—元操作符”的核心思路,并能把它用于实际开发或面试表达。 只能操作一个值的操作符叫做一元操作符。一元操作符是ECMAScript中最简单操作符。 1.递增和递减操作符 递增和递减操作符直接借鉴自C,而且各有两个版本:前置型和后置型。 顾名思义,前置型应该位于要操作的变量之前,而后置型则应该位于要操作的变量之后。因此,在使用前置递增操作符给一个数值加1时,要把两个加号(++)放在这个数值变量前面,如下所示: var age = 29; ++age; 实际上,执行这个前置递增操作与执行以下操作的效果相同: var age = 29; age = age +1; 执行前置递减操作的方法也类似。

执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种情况通常被称作副效应)。请看下面这个例子。

var age = 29;
var anotherAge = --age + 2;
alert(age); //

输出

28
alert(anotherAge); //

输出؜ 30 这个例子中变最anotherAge的初始值等于变量age的值前置递减之后加2。由于先执行了减法操作,age的值变成了 28,所以再加上2的结果就是30。 由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至右被求值。再看一个例子:

var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; //

等于

21
var num4 = num1 + num2; //

等于21

后置型递增和递减操作符的语法不变(仍然分别是++和--,只不过要放在变量的后面而不是前面)。 后置递增和递减与前置递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行的。这个区别在某些情况下不是什么间题,例如: var age = 29; age++; 把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作。但是,当语句中还包含其它操作时,上述区别就会非常明显了。请看下面的例子:

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; //

等于

22
var num4 = num1 + num2; //

等于21

所有这4个操作符对任何值都适用,也就是它们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。 在应用于不同的值时,递增和递减操作符遵循下列规则。

  • 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。
  • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN。
  • 字符串变最变成数值变最。字符串变量变成数值变量。
  • 在应用于布尔值false时,先将其转换为0再执行如减1的操作。布尔值变量变成数值变量。
  • 在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。
  • 在应用于浮点数值时,执行加减1操作。
  • 在应用于对象时,先调用对象的valueOf()方法(第5章将详细讨论)以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量。

以下示例展示了上面的一些规则:

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

本站总访问 — 次