ES6 至今的运算符扩展总结
1. 幂运算符(**
)
- 引入版本:ES7(ES2016)
- 功能:计算一个数的幂,相当于
Math.pow
的简写。
let result = 2 ** 3;
let result2 = 10 ** -2;
2. Null 合并运算符(??
)
- 引入版本:ES11(ES2020)
- 功能:当左操作数为
null
或 undefined
时返回右操作数,否则返回左操作数。
let value = null ?? "default";
let value2 = 0 ?? "default";
3. 可选链运算符(?.
)
- 引入版本:ES11(ES2020)
- 功能:在链式访问对象属性或方法时,防止出现
TypeError
,如果链中的某一部分为 null
或 undefined
,返回 undefined
。
let obj = { a: { b: 42 } };
console.log(obj?.a?.b);
console.log(obj?.x?.y);
4. 逻辑赋值运算符
- 引入版本:ES11(ES2020)
- 功能:结合逻辑运算和赋值操作,简化常见模式。
||=
:仅当左侧值为 false
(即 falsy 值)时赋值。&&=
:仅当左侧值为 true
(即 truthy 值)时赋值。??=
:仅当左侧值为 null
或 undefined
时赋值。
let a = null;
a ||= "default";
let b = true;
b &&= "updated";
let c = undefined;
c ??= "fallback";
5. 扩展运算符(...
)
- 引入版本:ES6(ES2015)
- 功能:用于数组或对象的展开与合并。
let arr = [1, 2, 3];
let newArr = [...arr, 4, 5];
let obj = { a: 1, b: 2 };
let newObj = { ...obj, c: 3 };
6. Rest 参数(...
)
- 引入版本:ES6(ES2015)
- 功能:用于函数参数的集合操作,将剩余参数收集为数组。
function sum(...numbers) {
return numbers.reduce((a, b) => a + b, 0);
}
console.log(sum(1, 2, 3, 4));
7. BigInt 操作支持(+
、-
、*
、**
、%
等)
- 引入版本:ES11(ES2020)
- 功能:对任意大整数进行精确操作。
let bigInt = 123456789012345678901234567890n;
let sum = bigInt + 10n;
8. 管道运算符(|>
) (提案阶段)
let result = value |> double |> square |> increment;
9. 模式匹配(match
) (提案阶段)
- 目标:类似于其他语言的模式匹配,简化复杂的条件逻辑。
match (value) {
when { x: 1 } -> doSomething(),
when [1, 2, 3] -> doSomethingElse(),
else -> fallback()
}
小结
运算符 | 版本 | 功能 |
---|
** | ES7 (2016) | 幂运算 |
?? | ES11 (2020) | Null 合并 |
?. | ES11 (2020) | 可选链操作 |
` | | =, &&=, ??=` |
... (扩展/Rest 参数) | ES6 (2015) | 解构、合并、收集参数 |
BigInt 运算 | ES11 (2020) | 对大整数进行精确运算 |
` | >`(管道运算符) | 提案阶段 |
match (模式匹配) | 提案阶段 | 高效条件判断 |