fe-interview
fe-interview copied to clipboard
[ECMAScript] 第1740天 请说说ES2023有哪些新特性?
ES2023 (ECMAScript 2023) 引入了一些新特性,旨在增强JavaScript语言的功能和可用性。这些特性包括数组和对象的扩展、新的语法改进以及对现有功能的增强。以下是ES2023的一些主要新特性:
1. Array.prototype.toSorted
Array.prototype.toSorted 方法返回一个新的数组,该数组是按排序后的顺序排列的,而原数组保持不变。这种方法与 Array.prototype.sort 类似,但不会修改原数组。
const arr = [3, 1, 4, 1, 5, 9];
const sortedArr = arr.toSorted((a, b) => a - b);
console.log(sortedArr); // 输出: [1, 1, 3, 4, 5, 9]
console.log(arr); // 输出: [3, 1, 4, 1, 5, 9]
2. Array.prototype.toReversed
Array.prototype.toReversed 方法返回一个新的数组,该数组是按逆序排列的,而原数组保持不变。
const arr = [1, 2, 3];
const reversedArr = arr.toReversed();
console.log(reversedArr); // 输出: [3, 2, 1]
console.log(arr); // 输出: [1, 2, 3]
3. Array.prototype.toSpliced
Array.prototype.toSpliced 方法返回一个新的数组,该数组是在指定位置插入、删除或替换元素后的数组,而原数组保持不变。
const arr = [1, 2, 3, 4, 5];
const splicedArr = arr.toSpliced(1, 2, 10, 11);
console.log(splicedArr); // 输出: [1, 10, 11, 4, 5]
console.log(arr); // 输出: [1, 2, 3, 4, 5]
4. Array.prototype.with
Array.prototype.with 方法返回一个新的数组,该数组是将指定位置的元素替换后的结果,而原数组保持不变。
const arr = [1, 2, 3];
const withArr = arr.with(1, 10);
console.log(withArr); // 输出: [1, 10, 3]
console.log(arr); // 输出: [1, 2, 3]
5. Object.prototype.hasOwn
Object.prototype.hasOwn 方法是一个新的方法,用于判断对象自身是否具有指定的属性。它与 Object.prototype.hasOwnProperty 类似,但更加简洁。
const obj = { a: 1, b: 2 };
console.log(obj.hasOwn('a')); // 输出: true
console.log(obj.hasOwn('c')); // 输出: false
6. Symbols作为WeakMap和WeakSet的键
在ES2023中,WeakMap 和 WeakSet 支持使用 Symbol 作为键。这增强了这些数据结构的灵活性和功能性。
const wm = new WeakMap();
const ws = new WeakSet();
const sym = Symbol('key');
wm.set(sym, 'value');
ws.add(sym);
console.log(wm.get(sym)); // 输出: 'value'
console.log(ws.has(sym)); // 输出: true
7. Array 和 TypedArray 的 findLast 和 findLastIndex 方法
这两个方法允许从数组末尾开始查找元素。
const arr = [1, 2, 3, 4, 5];
const found = arr.findLast(x => x % 2 === 1);
console.log(found); // 输出: 5
const foundIndex = arr.findLastIndex(x => x % 2 === 1);
console.log(foundIndex); // 输出: 4
8. 新的 Array 和 TypedArray 方法
这些新方法扩展了数组和类型数组的功能,包括:
toReversed()toSorted()toSpliced()with()
结论
ES2023 引入的这些新特性增强了JavaScript的功能,使得处理数组和对象更加简洁和高效。这些改进不仅提高了代码的可读性和可维护性,还提供了更多的工具来解决常见的编程问题。