05基础运算
一、数学运算
支持以下数学运算:
- 加法
+, - 减法
-, - 乘法
*, - 除法
/, - 取余
%, - 求幂
**.
通常,加号 + 用于求和。
但是如果加号 + 被应用于字符串,它将合并(连接)各个字符串:
1 | let s = "my" + "string"; |
注意:只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串。
此外,加号 + 还是一种一元运算符。
加号 + 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 + 则会将其转化为数字。它的效果和 Number(...) 相同,但是更加简短。
1 |
|
二、赋值运算
- 赋值
=; - “修改并赋值”运算符
+=,*=,/=,-=; - 自增
++; - 自减
--;
三、位运算
- 按位与 (
&) - 按位或 (
|) - 按位异或 (
^) - 按位非 (
~) - 左移 (
<<) - 右移 (
>>) - 无符号右移 (
>>>)
四、比较运算
- 大于 / 小于:
a > b,a < b。 - 大于等于 / 小于等于:
a >= b,a <= b。 - 检查两个值的相等:
a == b。 - 检查两个值不相等:
a != b。 - 检查两个值严格相等:
a === b。 - 检查两个值严格不相等:
a !== b。
当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小。
严格相等运算符 === 在进行比较时不会做任何的类型转换。
换句话说,如果 a 和 b 属于不同的数据类型,那么 a === b 不会做任何的类型转换而立刻返回 false。
五、对 null 和 undefined 进行比较
1 | alert( null === undefined ); // false |
通过比较 null 和 0 可得:
1 | alert( null > 0 ); // (1) false |
为什么会出现这种反常结果,这是因为相等性检查 == 和普通比较符 > < >= <= 的代码逻辑是相互独立的。进行值的比较时,null 会被转化为数字,因此它被转化为了 0。这就是为什么(3)中 null >= 0 返回值是 true,(1)中 null > 0 返回值是 false。
然而,undefined 和 null 在相等性检查 == 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 null == 0 会返回 false。
undefined 不应该被与其他值进行比较:
1 | alert( undefined > 0 ); // false (1) |
原因如下:
(1)和(2)都返回false是因为undefined在比较中被转换为了NaN,而NaN是一个特殊的数值型值,它与任何值进行比较都会返回false。(3)返回false是因为这是一个相等性检查,而undefined只与null相等,不会与其他值相等。

