Javascript 零基础教程

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); // 输出: 2

1.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 = yx = y
+=加法赋值x += yx = x + y
-=减法赋值x -= yx = x - y
*=乘法赋值x *= yx = x * y
/=除法赋值x /= yx = x / y
%=取模赋值x %= yx = 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); // 输出: 24

3. 比较运算符 (Comparison Operators)

比较运算符用于比较两个值,并始终返回一个布尔值truefalse)。这对于代码中的决策逻辑(如 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