ECMAScript 一元运算符

出自嗶哩嗶哩百科
跳转到: 导航, 搜索

一元运算符只有一个参数,即要操作的对象或值。它们是ECMAScript 中最简单的运算符。

前增量/前减量运算符

直接从C(和Java)借用的两个运算符是前增量运算符和前减量运算符。

所谓前增量运算符,就是数值上加1,形式是在变量前放两个加号(++):

 var iNum = 10; ++iNum;

第二行代码把iNum 增加到了11,它实质上等价于:

 var iNum = 10; iNum = iNum + 1;

同样,前减量运算符是从数值上减1,形式是在变量前放两个减号(--):

 var iNum = 10; --iNum;

在这个例子中,第二行代码把iNum 的值减到9。

在使用前缀式运算符时,注意增量和减量运算符都发生在计算表达式之前。考虑下面的例子:

 var iNum = 10; --iNum; alert(iNum);	 /* 输出"9" */
 trace(--iNum);	 /* 输出"8" */
 trace(iNum);	 /* 输出"8" */

第二行代码对iNum 进行减量运算,第三行代码显示的结果是("9")。第四行代码又对iNum 进行减量运算,不过这次前减量运算和输出操作出现在同一个语句中,显示的结果是"8"。为了证明已实现了所有的减量操作,第五行代码又输出一次"8"。

在算术表达式中,前增量和前减量运算符的优先级是相同的,因此要按照从左到右的顺序计算之。例如:

 var iNum1 = 2; var iNum2 = 20; var iNum3 = --iNum1 + ++iNum2;	 /*等于"22" */
 var iNum4 = iNum1 + iNum2;		 /* 等于"22"*/

在前面的代码中,iNum3 等于22,因为表达式要计算的是1 + 21。变量iNum4 也等于22,也是1 + 21。

后增量/后减量运算符

还有两个直接从C(和Java)借用的运算符,即后增量运算符和后减量运算符。

后增量运算符也是给数值上加1,形式是在变量后放两个加号(++):

 var iNum = 10; iNum++;

不出所料,后减量运算符也是从数值上减1,形式为在变量后加两个减号(--):

 var iNum = 10; iNum--​​;

第二行代码把iNum 的值减到9。 与前缀式运算符不同的是,后缀式运算符是在计算过包含它们的表达式后才进行增量或减量运算的。考虑以下的例子:

 var iNum = 10; iNum--; alert(iNum);	 /*输出"9" */
 trace(iNum--);	 /*输出"9" */
 trace(iNum);	 /*输出"8"*/

与前缀式运算符的例子相似,第二行代码对iNum 进行减量运算,第三行代码显示结果("9")。第四行代码继续显示iNum 的值,不过这次是在同一语句中应用减量运算符。由于减量运算发生在计算过表达式之后,所以这条语句显示的数是"9"。执行了第五行代码后,alert 函数显示的是"8",因为在执行第四行代码之后和执行第五行代码之前,执行了后减量运算。

在算术表达式中,后增量和后减量运算符的优先级是相同的,因此要按照从左到右的顺序计算之。例如:

 var iNum1 = 2; var iNum2 = 20; var iNum3 = iNum1-- + iNum2++;	 //等于"22" 
 var iNum4 = iNum1 + iNum2;		 //等于"22"

在前面的代码中,iNum3 等于22,因为表达式要计算的是2 + 20。变量iNum4 也等于22,不过它计算的是1 + 21,因为增量和减量运算都在给iNum3 赋值后才发生。

一元加法和一元减法

大多数人都熟悉一元加法和一元减法,它们在ECMAScript 中的用法与您高中数学中学到的用法相同。

一元加法本质上对数字无任何影响:

 var iNum = 20; iNum = +iNum; trace(iNum);	 /*输出"20"*/

这段代码对数字20 应用了一元加法,返回的还是20。

尽管一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。

 var sNum = "20"; trace(typeof sNum);	 /* 输出"string" */
 var iNum = +sNum; trace(typeof iNum);	 /* 输出"number"*/

这段代码把字符串"20" 转换成真正的数字。当一元加法运算符对字符串进行操作时,它计算字符串的方式与parseInt() 相似,主要的不同是只有对以"0x" 开头的字符串(表示十六进制数字),一元运算符才能把它转换成十进制的值。因此,用一元加法转换"010",得到的总是10,而"0xB" 将被转换成11。

另一方面,一元减法就是对数值求负(例如把20 转换成-20):

 var iNum = 20; iNum = -iNum; trace(iNum);	 /*输出"-20"*/

与一元加法运算符相似,一元减法运算符也会把字符串转换成近似的数字,此外还会对该值求负。例如:

 var sNum = "20"; trace(typeof sNum);	 /*输出"string" */
 var iNum = -sNum; trace(iNum);		 /*输出"-20" */
 trace(typeof iNum);	 /*输出"number"*/

在上面的代码中,一元减法运算符将把字符串"-20" 转换成-20(一元减法运算符对十六进制和十进制的处理方式与一元加法运算符相似,只是它还会对该值求负)。

个人工具
名字空间
变换
动作
导航
更新
工具箱