根据这些 JS 运算符执行的操作类型,我们可以将它们分为七组:
- 算数运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
- 运算符的类型
- 按位运算符
算术运算符
算术运算符用于执行数学运算,如加法和减法。
这些运算符经常与数字数据类型一起使用,因此它们类似于计算器。下面的示例演示如何使用运算符将两个变量相加:+
js
let x = 3;
let y = 8;
console.log(x + y); // 11
您可以直接对值使用运算符,而无需将它们分配给任何变量:
js
console.log(2 + 1); // 3
console.log(4 + 1); // 5
在 JavaScript 中,我们总共有 8 个算术运算符。它们是:
- 加法
+
- 减法
-
- 乘法
*
- 除法
/
- 取余
%
- 幂
**
- 增加
++
- 递减
--
我们可以混合这些运算符来执行复杂的数学方程。
js
console.log(5 + 2 * 3); // 11
JavaScript 中的运算顺序与数学中的操作顺序相同。乘法、除法和幂的优先级高于加法或减法
可以使用括号更改操作的顺序。包装要首先执行的操作,如下所示:()
js
console.log((5 + 2) * 3); // 21
将递增或递减运算符与其他运算符一起使用时,需要将运算符放在前缀位置,如下所示:
js
let x = 5;
console.log(2 + ++x); // 2 + 6 = 8
让我们尝试一些练习。你能猜出这些操作的结果吗?
js
console.log(5 * 3 - 2);
console.log((3 * 6) % 2);
console.log(5 + 7 - 1);
console.log((4 + 9) * 4);
let x = 5;
console.log(++x);
console.log(x++ / 3);
赋值运算符
js
let x = 5;
在基本赋值运算符之后,还有 5 个赋值运算符将数学运算与赋值相结合。这些运算符可用于使代码干净而简短。
例如,假设您要将变量递增 2。以下是使用基本赋值运算符执行此操作的方法:x
js
let x = 5;
x = x + 2;
上面的代码没有任何问题,但您可以使用加法赋值重写第二行,如下所示:+=
js
let x = 5;
x += 2;
您可以在 JavaScript 中使用 7 种赋值运算符:
名字 | 操作示例 | 意义 |
---|---|---|
分配 | x = y |
x = y |
加法分配 | x += y |
x = x + y |
减法分配 | x -= y |
x = x - y |
乘法赋值 | x *= y |
x = x * y |
除法分配 | x /= y |
x = x / y |
余数分配 | x %= y |
x = x % y |
幂赋值 | x **= y |
x = x ** y |
让我们快速练习一下。
js
let x = 3;
x += 2 * 3;
console.log(x);
x -= 3;
console.log(x);
x %= 2;
console.log(x);
比较运算符
顾名思义,比较运算符用于将一个值或变量与其他值或变量进行比较。此类别中的运算符始终返回布尔值:要么 true
要么false
例如,假设您要比较变量的值是否大于 1。你可以通过下面的方法进行判断:
js
let x = 5;
console.log(x > 1); // true
console.log(x > 7); // false
avaScript 中有 8 种比较运算符可用:
名字 | 操作示例 | 意义 |
---|---|---|
等于 | x == y |
如果操作数相等则返回true |
不等于 | x != y |
如果操作数不相等,则返回true |
严格等于 | x === y |
如果操作数相等且类型相同,则返回true |
严格不等于 | x !== y |
如果操作数不相等或具有不同的类型,则返回true |
大于 | x > y |
如果左操作数大于右操作数,则返回true |
大于或等于 | x >= y |
如果左操作数大于或等于右操作数,则返回true |
小于 | x < y |
如果左操作数小于右操作数,则返回true |
小于或等于 | x <= y |
如果左操作数小于或等于右操作数,则返回true |
以下是使用比较运算符的一些示例:
js
console.log(9 == 9); // true
console.log(9 != 20); // true
console.log(2 > 10); // false
console.log(2 < 10); // true
console.log(5 >= 10); // false
console.log(10 <= 10); // true
比较运算符进一步分为两种类型:关系运算符和相等运算符。
关系运算符比较一个操作数相对于第二个操作数的值(大于、小于)
相等运算符检查左侧的值是否等于右侧的值。它们还可用于比较如下所示的字符串:
js
console.log("ABC" == "ABC"); // true
console.log("ABC" == "abc"); // false
console.log("Z" != "A"); // true
字符串比较区分大小写,如上例所示。
在严格模式下,JavaScript 将比较值而不执行类型强制。要启用严格模式,您需要在操作中添加一个相等符号,如下所示:=
js
console.log("9" == 9); // true
// strict equal
console.log("9" === 9); // false
console.log("1" != 1); // false
// strict not equal
console.log("1" !== 1); // true
由于类型强制可能导致不需要的行为,因此在执行相等比较时应使用严格的相等运算符。
逻辑运算符
JavaScript 中有三个可用的逻辑运算符:
| 名字 | 操作示例 | 意义 |
|:-----|:---------|:--------------------------------------------|-----|----------------------------------------------|
| 逻辑和 | x && y
| 如果所有操作数都是 ,则返回 ,否则返回true``true``false
|
| 逻辑或 | `x | | y` | 如果其中一个操作数为 ,则返回 ,否则返回true``true``false
|
| 逻辑不是 | !x
| 反转结果:返回 if 反之亦然true``false
|
这些运算符只能返回布尔值。例如,您可以确定"7 是否大于 2"和"5 大于 4":
js
console.log(7 > 2 && 5 > 4); // true
这些逻辑运算符遵循数理逻辑定律:
&&
AND 运算符 -- 如果任何表达式返回false,则结果为false||
OR 运算符 -- 如果任何表达式返回true,则结果为true!
NOT 运算符 -- 否定表达式,返回相反的表达式。
我们来看下面的语句,你能看出来结果吗
js
console.log(true && false);
console.log(false || false);
console.log(!true);
三元运算符
假设您需要在代码中实现一些特定的逻辑。假设你开了一家卖水果的商店。当总购买量为 3 美元或更多时,您可以享受 20 元的折扣。否则,您提供 1 元的折扣。
您可以使用语句实现逻辑,如下所示:if..else
js
let totalPurchase = 15;
let discount;
if (totalPurchase >= 20) {
discount = 3;
} else {
discount = 1;
}
上面的代码工作正常,但您可以使用三元运算符使代码更短、更简洁,如下所示:
js
let totalPurchase = 15;
let discount = totalPurchase >= 20 ? 3 : 1;
typeof
下面是使用运算符的一些示例:
js
let x = 5;
console.log(typeof x) // 'number'
console.log(typeof "Nathan") // 'string'
console.log(typeof true) // 'boolean'
console.log(typeof null) // 'object'
console.log(typeof [1, 2, 3]) // 'object'
console.log(typeof {}) // 'object'
console.log(typeof undefined) // 'undefined'
按位运算符
按位运算符是将其操作数视为一组二进制数字,但将运算结果作为十进制值返回的运算符
JavaScript 中有 7 种类型的按位运算符:
- 和
&
- 或
|
- 异或
^
- 不
~
- 左移
<<
- 右移
>>
- 零填充右移
>>>
1. 按位 AND 运算符
当数字 1 在两个操作数中重叠时,按位运算符 AND 返回 1。十进制数字 1 和 2 没有重叠的 1,因此在数字上使用此运算符返回 0:&
js
// 1 = 00000001
// 2 = 00000010
// ------------
// 00000000 = 0
console.log(1 & 2); // 0
2. 按位 OR 运算符
另一方面,按位运算符 OR 返回两个十进制数字中的所有 1。|
js
// 1 = 00000001
// 2 = 00000010
// ------------
// 00000011 = 3
console.log(1 | 2); // 3
二进制数00000011表示十进制数 3,因此上面的 OR 运算符返回 3。
按位异或运算符
按位 XOR 查找两个二进制数之间的差异。当相应的位相同时,它返回 0:^
5 = 00000101
js
// 5 = 00000101
// 7 = 00000111
// ------------
// 00000010 = 2
console.log(5 ^ 7); // 2
按位非运算符
按位 NOT 运算符反转十进制数的位,因此 0 变为 1,1 变为 0:~
js
// 5 = 00000101
// ------------
// 11111010 = -6
console.log(~5); // -6
按位左移运算符
按位左移通过从右侧添加零来移动位的位置。<<
然后丢弃多余的位,更改由位表示的十进制数。请参阅以下示例:
js
console.log(5 << 2);
// 5 = 00000101
// ------------ << Shift to the left by 2
// 00010100 = 20
右操作数是要添加到左操作数的零数。
按位右移运算符
按位右移通过从左侧添加零来移动位的位置。它与左移运算符相反:>>
js
console.log(5 >> 2); // 1
// 5 = 00000101
// ------------ >> Shift to the right by 2
// 00000001 = 1
按位零填充右移运算符
也称为无符号右移运算符,零填充右移运算符用于将位的位置向右移动,同时将符号位更改为 。>>>``0
此运算符将任何负数转换为正数,因此您可以看到将负数作为左操作数传递时它是如何工作的:
js
console.log(-70 >> 1); // -35
console.log(-70 >>> 1); // 2147483613
console.log(5 >> 1); // 2
console.log(5 >>> 1); // 2