3

一、算术运算符

运算符 描述 例子 x 运算结果 y 运算结果
+ 加法 x=y+2 7 5
- 减法 x=y-2 3 5
* 乘法 x=y*2 10 5
/ 除法 x=y/2 2.5 5
% 取模(余数) x=y%2 1 5
++ 自增 x=++y 6 6
++ 自增 x=y++ 5 6
-- 自减 x=--y 4 4
-- 自减 x=y-- 5 4

二、加法 (+)

2.1 作用

(1)数值求和

(2)字符串拼接

2.2 示例

加法

(1)布尔值会自动转换为 数值,false 转换为 0,true 转换为 1,然后再相加。

2.3 重载

加法运算符是在运行时决定,到底是执行相加,还是执行连接。也就是说,运算子的不同,导致了不同的语法行为,这种现象称为“重载”(overload)。

由于加法运算符存在重载,可能执行两种运算,使用的时候必须很小心。

重载

上面代码中,由于从左到右的运算次序,字符串的位置不同会导致不同的结果

除了加法运算符,其他算术运算符(比如减法、除法和乘法)都不会发生重载。他们的规则是 所有运算子一律转为数值,再进行相应的数学运算。

都不重载

上面代码中,减法、除法和乘法运算符,都是将字符串自动转为数值,然后再运算。

2.4 对象的加法

(1)如果运算子是对象,必须先转成原始类型的值,然后再相加。

(2)转换规则

首先,调用对象的 valueOf() 方法,返回对象自身,再调用对象的 toString() 方法,将其转为字符串(原始类型)

对象的加法

2.5 特殊行为

(1)某个运算数是 NaN,那么结果为 NaN。

(2)-Infinity 加 -Infinity,结果为 -Infinity。

(3)Infinity 加 -Infinity,结果为 NaN。

(4)+0 加 +0,结果为 +0。

(5)-0 加 +0,结果为 +0。

(6)-0 加 -0,结果为 -0。

(7)任何数据类型 + 字符串 = 字符串

字符串

(8)若数值求和,undefined 转换为 NaN,null 转换为 0

数值求和

(9)若字符串拼接,undefined 转换为 'undefined',null 转换为 'null',false 转换为 'false',true 转换为 'true'

字符串拼接

三、减法 (-)

3.1 特殊行为

(1)某个运算数是 NaN,那么结果为 NaN。

(2)Infinity 减 Infinity,结果为 NaN。

(3)-Infinity 减 -Infinity,结果为 NaN。

(4)Infinity 减 -Infinity,结果为 Infinity。

(5)-Infinity 减 Infinity,结果为 -Infinity。

(6)+0 减 +0,结果为 +0。

(7)-0 减 -0,结果为 -0。

(8)+0 减 -0,结果为 +0。

(9)某个运算符不是数字,那么结果为 NaN。

(10)undefined 转换为 NaN,null 转换为 0

减法

四、乘法 (*)

4.1 特殊行为

(1)如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。

(2)如果某个运算数是 NaN,结果为 NaN。

(3)Infinity 乘以 0,结果为 NaN。

NaN

(4)Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。

Infinity或-Infinity

(5)Infinity 乘以 Infinity,结果为 Infinity。

Infinity

五、除法 (/)

5.1 特殊行为

(1)如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。

(2)如果某个运算数是 NaN,结果为 NaN。

(3)Infinity 被 Infinity 除,结果为 NaN。

NaN

(4)Infinity 被任何数字除,结果为 Infinity。

Infinity

(5)0 除一个任何非无穷大的数字,结果为 NaN。

NaN

(6)Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity。

Infinity或-Infinity

六、求余 (%)

求余运算符返回第一个操作数对第二个操作数的模,即 var1 对 var2 取模,其中 var1 和 var2 是变量。取模功能就是 var1 除以 var2 的 整型余数

6.1 示例

求余运算符(%)返回前一个运算子 后一个运算子 ,所得的 余数

求余运算符

6.2 注意

运算结果的正负号由 第一个运算子正负号 决定。

正负号

6.3 绝对值函数

为了得到 负数 的正确余数值,可以先使用绝对值函数。

绝对值函数

6.4 浮点数运算

余数运算符还可以用于浮点数的运算。但是,由于浮点数 不是精确的值,无法得到完全准确的结果。

浮点数运算

6.5 特殊行为

(1)如果被除数是 Infinity,或除数是 0,结果为 NaN。

(2)Infinity 被 Infinity 除,结果为 NaN。

(3)如果除数是无穷大的数,结果为被除数。

(4)如果被除数为 0,结果为 0。

Example

七、幂 (**)

幂运算符返回第一个操作数做底数,第二个操作数做指数的乘方。即, var1var2 ,其中 var1 和 var2 是其两个操作数。

7.1 语法

运算符: var1 ** var2

7.2 注解

(1)包括 PHP 或 Python 等的大多数语言中,都包含幂运算符(一般来说符号是 ^ 或者 **)。这些语言中的幂运算符有着比其他的单目运算符(如一元 + 或一元 - )更高的优先级。但是作为例外,在 Bash 中,** 运算符被设计为比单目运算符优先级更低

(2)在最新的 JavaScript(ES2016) 中,禁止使用带歧义的幂运算表达式。比如,底数前不能紧跟一元运算符(+/-/~/!/delete/void/typeof)

Example

7.3 示例

Example

(1)如果要反转求幂表达式结果的符号,你可以采用这样的方式:

Example

(2)强制求幂表达式的基数为负数

Example

八、自增 (++)

自增运算符为其操作数增加1,返回一个数值。

8.1 后置和前置

(1)如果后置(postfix)使用,即运算符位于操作数的后面(如 x++),那么将会在自增前返回数值。

(2)如果前置(prefix)使用,即运算符位于操作数的前面(如 ++x),那么将会在自增后返回数值。

8.2 示例

自增

8.3 练习

练习

九、自减 (--)

自减运算符将其操作数减去1,并返回一个数值。

9.1 后置和前置

(1)如果后置使用(如 x--),则在自减前返回数值。

(2)如果前置使用(如 --x),则在自减后返回数值。

9.2 示例

自减

阅读更多

参考文章 JavaScript 标准参考教程(alpha)运算符


WEBING
3.6k 声望6k 粉丝

GitHub [链接]