Hello,大家好,我是 Sunday。
最近看到一些同学有提到几个比较特殊的运算符,比如:??=、?.、?: 等等。
其实在 JS 中提供的运算符是非常多的,除了以上说到的几个之外,还有很多特殊的运算符。这些运算符可以帮助我们更灵活、简洁地编写代码。
所以,咱们今天就一起来看看 JS 中的特殊运算符,从基础到特殊,全方位了解它们的用法和实际应用场景!
1. 空值合并运算符 (??)
空值合并运算符 ?? 用于当左侧值为 null 或 undefined 时,返回右侧的值。这在需要设置默认值时非常方便。
示例:
let name = null;
let displayName = name ?? "Anonymous"; // 如果 name 是 null/undefined,则为 "Anonymous"
这个运算符能够帮助我们避免 null 或 undefined 导致的错误,常用于设置默认值。
2. 可选链运算符 (?.)
可选链运算符 ?. 可以安全地访问嵌套属性,避免在属性不存在时抛出错误。
示例:
let user = { name: "Alice" };
console.log(user?.address?.city); // 输出 undefined 而不是抛出错误
这个运算符非常适合在 API 返回数据不完整、嵌套对象结构不固定的场景下使用。
3. 逻辑赋值运算符 (||=, &&=, ??=)
逻辑赋值运算符是一组可以在特定条件下赋值的运算符,包括 ||=, &&= 和 ??=。
示例:
let x = 0;
x ||= 10; // 当 x 是假值时赋值为 10
x &&= 5; // 当 x 是真值时赋值为 5
x ??= 1; // 当 x 是 null 或 undefined 时赋值为 1
这些运算符可以让代码更加简洁,尤其是在条件赋值时非常实用。
4. 指数运算符 (**)
指数运算符 ** 用于计算幂值,类似于 Math.pow()。
示例:
let result = 2 ** 3; // 2 的 3 次幂,结果是 8
5. 三元运算符 (?:)
三元运算符 ?: 是一种简洁的条件语句,适合在简单条件判断时使用。
示例:
let isActive = true;
let status = isActive ? "Active" : "Inactive"; // 根据 isActive 的值选择不同的状态
三元运算符可以让代码更紧凑,但在条件较复杂时,建议还是使用 if 语句来保持代码的可读性。
6. 逗号运算符 (,)
逗号运算符允许我们在一行中执行多个表达式,最终返回最后一个表达式的值。
示例:
let x = (1 + 2, 3 + 4); // 最终 x 为 7
7. void 运算符 (void)
void 运算符可以执行表达式并返回 undefined。常用于立即执行函数表达式(IIFE)中。
示例:
void function sayHello() { console.log("Hello"); }(); // 输出 "Hello",返回 undefined
8. 类型运算符
- typeof:返回数据类型。
console.log(typeof "Hello"); // 输出 "string"
- instanceof:检查对象是否为某个构造函数的实例。
console.log([] instanceof Array); // 输出 true
9. 展开运算符 (...)
展开运算符 ... 用于将数组或对象的所有元素展开,方便合并和复制。
示例:
let arr1 = [1, 2];
let arr2 = [...arr1, 3, 4]; // 合并数组
let obj = { ...{ a: 1 }, b: 2 }; // 合并对象
10. 解构赋值
解构赋值可以从数组或对象中提取值赋给变量,简化赋值操作。
示例:
let [a, b] = [1, 2];
let { x, y } = { x: 10, y: 20 };
11. 位运算符
位运算符主要用于按位操作,包括 &、|、^、~、<<、>>、>>> 等。常用于优化性能或特定算法。
示例:
let result = 5 & 1; // 按位与运算,结果是 1
12. new 运算符
new 运算符用于创建对象实例,是 JavaScript 面向对象编程中的基础。
示例:
let date = new Date(); // 创建 Date 实例
13. delete 运算符
delete 用于删除对象的属性,删除成功会返回 true。
示例:
let obj = { a: 1, b: 2 };
delete obj.a; // 删除属性 a
14. in 运算符
in 运算符检查对象是否包含某个属性,返回布尔值。
示例:
let obj = { a: 1 };
console.log("a" in obj); // 输出 true