关键要点
- JavaScript 运算符包括算术、赋值、字符串、比较、逻辑、位和条件等多种类型。
- 它们用于执行数学运算、比较值、连接字符串和逻辑判断。
- 运算符优先级影响表达式的执行顺序,建议使用括号明确顺序。
算术运算符
算术运算符用于基本的数学运算,例如加、减、乘、除和取模。
例如:5 + 3 结果为 8,5 % 3 结果为 2。
赋值和字符串运算符
赋值运算符如 = 用于给变量赋值,+= 可同时加法和赋值。
字符串运算符 + 用于连接字符串,例如 "Hello" + " World" 结果为 "Hello World"。
比较和逻辑运算符
比较运算符如 == 和 === 用于比较值,== 会类型转换,=== 不转换。
逻辑运算符如 &&(与)和 ||(或)用于条件判断,例如 true && false 结果为 false。
其他运算符
位运算符如 &(位与)用于二进制操作,三元运算符 ?: 用于条件表达式,例如 age >= 18 ? "成年" : "未成年"。
详细报告
JavaScript 运算符是编程语言中的核心组成部分,用于执行各种操作,如数学计算、值比较、字符串连接和逻辑判断。以下是对 JavaScript 运算符的全面讲解,涵盖其类型、用法和注意事项,适合初学者和中级开发者参考。
1. 算术运算符
算术运算符用于执行基本的数学运算,包括加、减、乘、除、取模、自增和自减。以下是详细列表:
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 5 + 3 | 8 |
- | 减法 | 5 - 3 | 2 |
* | 乘法 | 5 * 3 | 15 |
/ | 除法 | 5 / 3 | 1.6666666666666667 |
% | 取模(余数) | 5 % 3 | 2 |
++ | 自增(前置或后置) | let x = 5; ++x | 6(前置);let x = 5; x++ 结果为 5,但 x 变为 6 |
-- | 自减(前置或后置) | let x = 5; --x | 4(前置);let x = 5; x-- 结果为 5,但 x 变为 4 |
注意:自增和自减运算符的优先级高于大多数算术运算符,因此在复杂表达式中需要注意顺序。例如,x = 5; y = x++ + 1; 中,x++ 先返回 5,然后 x 变为 6,y 结果为 6。
2. 赋值运算符
赋值运算符用于将右操作数的值赋给左操作数,最基本的是 =。还有复合赋值运算符,如 +=、-= 等,简化了常见的操作。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
= | 赋值 | x = 5 | x 变为 5 |
+= | 加法赋值 | x = 5; x += 3 | x 变为 8(等同于 x = x + 3) |
-= | 减法赋值 | x = 5; x -= 3 | x 变为 2(等同于 x = x - 3) |
*= | 乘法赋值 | x = 5; x *= 3 | x 变为 15(等同于 x = x * 3) |
/= | 除法赋值 | x = 5; x /= 3 | x 变为 1.6666666666666667(等同于 x = x / 3) |
%= | 取模赋值 | x = 5; x %= 3 | x 变为 2(等同于 x = x % 3) |
示例:
let x = 10;
x += 5; // x 现在是 15
console.log(x); // 输出 15
赋值运算符的优先级较低(优先级 2),支持链式赋值,例如 a = b = c = 2 + 2。
3. 字符串运算符
JavaScript 使用 + 运算符进行字符串连接,+= 用于字符串追加。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
+ | 字符串连接 | "Hello" + " World" | "Hello World" |
+= | 字符串连接并赋值 | let str = "Hello"; str += " World"; | str 变为 "Hello World" |
注意:当 + 运算符的一个操作数是字符串时,另一个操作数会自动转换为字符串。例如:
"5" + 5结果为"55"(字符串连接)5 + "5"结果为"55"(同上)5 + 5结果为10(数字加法)
这种行为可能导致意外结果,需注意类型转换。例如,"Hello" + 5 结果为 "Hello5"。
4. 比较运算符
比较运算符用于比较两个值,并返回布尔值 true 或 false。它们包括相等、不相等、大于、小于等。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
== | 相等(类型转换) | 5 == "5" | true |
=== | 严格相等(不转换类型) | 5 === "5" | false |
!= | 不相等(类型转换) | 5 != "5" | false |
!== | 严格不相等(不转换类型) | 5 !== "5" | true |
> | 大于 | 5 > 3 | true |
< | 小于 | 5 < 3 | false |
>= | 大于或等于 | 5 >= 3 | true |
<= | 小于或等于 | 5 <= 3 | false |
注意:== 和 != 会进行类型转换,可能导致意外结果。例如,0 == false 结果为 true,但 0 === false 结果为 false。建议在严格比较时使用 === 和 !==。
5. 逻辑运算符
逻辑运算符用于连接多个条件,返回布尔值,并具有短路求值特性。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
&& | 逻辑与(AND) | true && false | false(如果第一个操作数为 false,不评估第二个) |
|| | 逻辑或(OR) | true || false | true(如果第一个操作数为 true,不评估第二个) |
! | 逻辑非(NOT) | !true | false |
示例:
let age = 20;
if (age > 18 && age < 60) {
console.log("成年人"); // 输出 "成年人"
}
逻辑运算符的优先级为:!(最高),&&,||(最低)。
6. 位运算符
位运算符对操作数的二进制表示进行操作,JavaScript 将操作数视为 32 位的二进制数。
| 运算符 | 描述 | 示例 | 结果(二进制) | 十进制结果 |
|---|---|---|---|---|
& | 位与(AND) | 5 & 1(101 & 001) | 001 | 1 |
| | 位或(OR) | 5 | 1(101 | 001) | 101 | 5 |
^ | 位异或(XOR) | 5 ^ 1(101 ^ 001) | 100 | 4 |
~ | 位非(NOT) | ~5(~101) | ...1010(32 位补码) | -6 |
<< | 左移 | 5 << 1(101 << 1) | 1010 | 10 |
>> | 右移(带符号) | 5 >> 1(101 >> 1) | 010 | 2 |
>>> | 无符号右移 | 5 >>> 1(101 >>> 1) | 010 | 2 |
注意:位运算符通常用于低级操作,如优化或加密算法,在 Web 开发中使用较少。
7. 三元运算符
三元运算符是 JavaScript 中唯一的条件运算符,用于根据条件返回不同的值。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
?: | 条件运算符 | age >= 18 ? "成年" : "未成年" | 如果 age 为 20,结果为 "成年" |
示例:
let status = age >= 18 ? "成年" : "未成年";
console.log(status); // 输出 "成年" 或 "未成年"
8. 其他运算符
还有一些特殊运算符,适用于特定场景:
- 逗号运算符(
,):从左到右评估多个表达式,返回最后一个表达式的值。 - 示例:
(1, 2, 3)结果为3。 - typeof:返回变量的类型。
- 示例:
typeof "hello"结果为"string"。 - delete:删除对象的属性。
- 示例:
delete obj.key。 - in:检查对象是否有特定属性。
- 示例:
'key' in obj结果为true或false。 - instanceof:检查对象是否是特定类型的实例。
- 示例:
obj instanceof Array结果为true或false。
9. 运算符优先级
运算符的优先级决定了表达式中运算的顺序。以下是部分运算符的优先级(从高到低):
| 优先级 | 运算符类型 | 示例 |
|---|---|---|
| 15 | 一元运算符 | !x, ++x, typeof x |
| 14 | 乘性运算符 | x * y, x / y, x % y |
| 13 | 加性运算符 | x + y, x - y |
| 12 | 位移运算符 | x << y, x >> y, x >>> y |
| 11 | 关系运算符 | x > y, x < y, x in y, x instanceof y |
| 10 | 相等运算符 | x == y, x != y, x === y, x !== y |
| 9 | 位运算符 | x & y, x ^ y, x | y |
| 8 | 逻辑与 | x && y |
| 7 | 逻辑或 | x || y |
| 6 | 条件运算符 | x ? y : z |
| 2 | 赋值运算符 | x = y, x += y, x -= y |
| 1 | 逗号运算符 | x, y, z |
注意:优先级高的运算符先执行。如果不确定,可以使用括号 () 来明确顺序,例如 (a + b) * c。
10. 注意事项
- 类型转换:JavaScript 是动态类型语言,运算符可能隐式转换类型。例如,
+在数字上执行加法,在字符串上执行连接。 - 短路求值:逻辑运算符
&&和||具有短路特性,如果第一个操作数已确定结果,则不评估第二个操作数。 - 位运算符的局限:位运算符在 JavaScript 中操作 32 位整数,超出范围会截断。
总结
JavaScript 的运算符种类丰富,涵盖了从基本数学运算到高级逻辑判断的各种操作。理解它们的用法和优先级对编写正确高效的代码至关重要。初学者可通过 MDN Web Docs – JavaScript 表达式与运算符、w3school – JavaScript 运算符 和 菜鸟教程 – JavaScript 运算符 进一步学习。