JavaScript 运算符
运算符(Operators)允许我们对变量和值执行操作、处理数据并进行比较。
理解运算符是编写有效且动态的 JavaScript 代码的关键。本章将涵盖算术、赋值和比较运算符,为你处理更复杂的编程任务打下坚实基础。
1. 算术运算符 (Arithmetic Operators)
算术运算符用于执行数学计算。JavaScript 提供了一套标准的算术运算符,你可能在数学课上已经见过它们。
1.1 基础运算:加、减、乘、除
这些运算符的行为和你预期的基本数学运算完全一致。
- 加法 (+): 将两个操作数相加。
- 减法 (-): 从第一个操作数中减去第二个操作数。
- 乘法 (*): 将两个操作数相乘。
- 除法 (/): 用第一个操作数除以第二个操作数。
let x = 10;
let y = 5;
console.log(x + y); // 输出: 15
console.log(x - y); // 输出: 5
console.log(x * y); // 输出: 50
console.log(x / y); // 输出: 21.2 取模(取余)运算符 (%)
取模运算符 (%) 返回除法运算的余数。
这在编程中非常有用,常用于判断一个数是偶数还是奇数(看它除以 2 的余数是否为 0),或者将数值限制在某个范围内。
console.log(10 % 3); // 输出: 1 (因为 10 除以 3 等于 3,余数为 1)
console.log(12 % 2); // 输出: 0 (因为 12 除以 2 等于 6,余数为 0,说明是偶数)1.3 指数运算符 (**)
指数运算符 (**) 将第一个操作数提升到第二个操作数的幂次方。
console.log(2 ** 3); // 输出: 8 (2 的 3 次方,即 2 * 2 * 2)
console.log(5 ** 2); // 输出: 25 (5 的 2 次方)1.4 自增 (++) 和 自减 (--) 运算符
这两个运算符用于将变量的值增加 1 或减少 1。它们有两种写法:前置和后置,这在逻辑上有一点小区别。
- 前置 (Prefix, 如 ++x): 变量先改变值,然后再使用这个新值进行表达式运算。
- 后置 (Postfix, 如 x++): 变量先使用当前原值进行表达式运算,然后再改变值。
let a = 5;
console.log(a++); // 输出: 5 (先打印原值 5,然后 a 变成了 6)
console.log(a); // 输出: 6 (现在 a 是 6)
let b = 5;
console.log(++b); // 输出: 6 (先变成 6,然后打印 6)
console.log(b); // 输出: 6
let c = 10;
console.log(c--); // 输出: 10 (先打印原值 10,然后 c 变成了 9)
let d = 10;
console.log(--d); // 输出: 9 (先变成 9,然后打印 9)1.5 运算符优先级
了解优先级很重要,它决定了表达式中运算执行的顺序。例如,乘法和除法的优先级高于加法和减法。你可以使用括号 () 来改变默认的优先级。
console.log(3 + 4 * 2); // 输出: 11 (先算乘法 4*2=8,再加 3)
console.log((3 + 4) * 2); // 输出: 14 (括号强制先算加法 3+4=7,再乘 2)2. 赋值运算符 (Assignment Operators)
赋值运算符用于给变量赋值。最基本的是等号 (=),但 JavaScript 还提供了复合赋值运算符,将运算和赋值结合在一起。
| 运算符 | 描述 | 示例 | 等同于 |
|---|---|---|---|
= | 赋值 | 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 |
let x = 10;
x += 5; // 等同于 x = x + 5; x 现在是 15
console.log(x); // 输出: 15
x -= 3; // 等同于 x = x - 3; x 现在是 12
console.log(x); // 输出: 12
x *= 2; // 等同于 x = x * 2; x 现在是 24
console.log(x); // 输出: 243. 比较运算符 (Comparison Operators)
比较运算符用于比较两个值,并始终返回一个布尔值(true 或 false)。这对于代码中的决策逻辑(如 if 语句)至关重要。
3.1 相等运算符:== vs ===
这是初学者最容易混淆的地方,请务必注意。
==(相等): 检查两个值是否相等。如果类型不同,它会尝试进行类型转换(Type Coercion),把它们变成同一种类型后再比较。===(严格相等): 检查两个值是否相等且类型相同。它不会进行类型转换。
同理,不相等运算符也有两种:
!=(不相等): 仅检查值(会进行类型转换)。!==(严格不相等): 检查值或类型是否不同(不进行类型转换)。
console.log(5 == "5"); // 输出: true (字符串 "5" 被转换成了数字 5)
console.log(5 === "5"); // 输出: false (类型不同:一个是 Number,一个是 String)
console.log(0 == false); // 输出: true (false 被转换成了 0)
console.log(0 === false); // 输出: false (类型不同)
console.log(null == undefined); // 输出: true (在宽松比较下它们被视为相等)
console.log(null === undefined); // 输出: false (类型不同)最佳实践: 为了避免因隐式类型转换导致的奇怪 bug,建议在 99% 的情况下都使用 严格相等 (===) 和 严格不相等 (!==)。
3.2 关系运算符:>、<、>=、<=
这些运算符用于比较两个数值的大小关系。
>(大于)<(小于)>=(大于或等于)<=(小于或等于)
let x = 10;
let y = 5;
console.log(x > y); // 输出: true
console.log(x < y); // 输出: false
console.log(x >= 10); // 输出: true
console.log(5 <= 5); // 输出: true