推荐答案
ES2023 (ES14) 引入了以下新特性:
- Array.prototype.findLast 和 Array.prototype.findLastIndex:允许从数组的末尾开始查找元素或索引。
- Hashbang Grammar:正式支持在脚本文件顶部使用
#!
语法。 - Symbol.prototype.description:允许访问 Symbol 的描述符。
- Array.prototype.toReversed、toSorted、toSpliced、with:提供不可变版本的数组操作方法。
- WeakRefs 和 FinalizationRegistry:增强了对弱引用和垃圾回收的控制。
本题详细解读
Array.prototype.findLast 和 Array.prototype.findLastIndex
这两个方法允许开发者从数组的末尾开始查找元素或索引。findLast
返回最后一个满足条件的元素,而 findLastIndex
返回最后一个满足条件的元素的索引。
const array = [1, 2, 3, 4, 5]; const lastEven = array.findLast(x => x % 2 === 0); // 4 const lastEvenIndex = array.findLastIndex(x => x % 2 === 0); // 3
Hashbang Grammar
ES2023 正式支持在脚本文件顶部使用 #!
语法,这在 Node.js 中已经广泛使用。
#!/usr/bin/env node console.log('Hello, world!');
Symbol.prototype.description
Symbol.prototype.description
允许访问 Symbol 的描述符,这在调试和日志记录时非常有用。
const sym = Symbol('foo'); console.log(sym.description); // 'foo'
Array.prototype.toReversed、toSorted、toSpliced、with
这些方法提供了不可变版本的数组操作方法,返回一个新的数组,而不是修改原数组。
const array = [3, 1, 4, 1, 5, 9]; const reversed = array.toReversed(); // [9, 5, 1, 4, 1, 3] const sorted = array.toSorted(); // [1, 1, 3, 4, 5, 9] const spliced = array.toSpliced(2, 2); // [3, 1, 5, 9] const withElement = array.with(2, 10); // [3, 1, 10, 1, 5, 9]
WeakRefs 和 FinalizationRegistry
WeakRef
允许创建对对象的弱引用,而 FinalizationRegistry
允许在对象被垃圾回收时执行回调。
const registry = new FinalizationRegistry(heldValue => { console.log(`Object with held value ${heldValue} was garbage collected`); }); let obj = { key: 'value' }; registry.register(obj, 'some value'); obj = null; // 可能触发垃圾回收
这些新特性使得 JavaScript 在处理数组、符号、脚本执行和内存管理方面更加灵活和强大。