一、算术运算符
运算符 | 描述 | 例子 | 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。
(4)Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。
(5)Infinity 乘以 Infinity,结果为 Infinity。
五、除法 (/)
5.1 特殊行为
(1)如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
(2)如果某个运算数是 NaN,结果为 NaN。
(3)Infinity 被 Infinity 除,结果为 NaN。
(4)Infinity 被任何数字除,结果为 Infinity。
(5)0 除一个任何非无穷大的数字,结果为 NaN。
(6)Infinity 被 0 以外的任何数字除,结果为 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。
七、幂 (**)
幂运算符返回第一个操作数做底数,第二个操作数做指数的乘方。即, var1var2 ,其中 var1 和 var2 是其两个操作数。
7.1 语法
运算符: var1 ** var2
7.2 注解
(1)包括 PHP 或 Python 等的大多数语言中,都包含幂运算符(一般来说符号是 ^
或者 **
)。这些语言中的幂运算符有着比其他的单目运算符(如一元 + 或一元 - )更高的优先级。但是作为例外,在 Bash 中,**
运算符被设计为比单目运算符优先级更低。
(2)在最新的 JavaScript(ES2016) 中,禁止使用带歧义的幂运算表达式。比如,底数前不能紧跟一元运算符(+/-/~/!/delete/void/typeof)
7.3 示例
(1)如果要反转求幂表达式结果的符号,你可以采用这样的方式:
(2)强制求幂表达式的基数为负数:
八、自增 (++)
自增运算符为其操作数增加1,返回一个数值。
8.1 后置和前置
(1)如果后置(postfix)使用,即运算符位于操作数的后面(如 x++),那么将会在自增前返回数值。
(2)如果前置(prefix)使用,即运算符位于操作数的前面(如 ++x),那么将会在自增后返回数值。
8.2 示例
8.3 练习
九、自减 (--)
自减运算符将其操作数减去1,并返回一个数值。
9.1 后置和前置
(1)如果后置使用(如 x--),则在自减前返回数值。
(2)如果前置使用(如 --x),则在自减后返回数值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。