ES2023有哪些新特性?

2024-03-07 16:55:05 浏览数 (1267)


从后向前查找数组元素

由Wenlu Wang提出的“从后向前查找数组元素”提案在Array和TypedArray原型上添加了findLast()和findLastIndex()方法。它们与find()和findIndex()方法具有相同的功能,但顺序相反。这两种方法很方便,让我们避免创建临时副本、突变和混淆的索引。

const isEven = (number) => number % 2 === 0;
const numbers = [1, 2, 3, 4];
​
// 从第一个到最后一个查找
console.log(numbers.find(isEven));
// 2
console.log(numbers.findIndex(isEven));
// 1// 从最后一个到第一个查找
console.log(numbers.findLast(isEven));
// 4
console.log(numbers.findLastIndex(isEven));
// 3

Hashbang语法

Hashbang,也称为shebang ,是可执行脚本开头的一系列字符,用于定义要运行的程序的解释器。当Unix内核的程序加载器执行JavaScript程序时,主机会剥离hashbang以生成有效的源代码,然后将其传递给引擎。Bradley Farias提出的Hashbang语法提案规范了这个过程。

#!/usr/bin/env node
​
console.log('hi 👋');

Symbol作为WeakMap键

在JavaScript中,对象和Symbol保证是唯一的,不能重新创建,这使它们都成为WeakMap键的理想候选者。先前的版本或规范只允许使用对象作为键,但幸运的是,由Daniel Ehrenberg、Richard Button、Robin Ricard、Leo Balter、Rick Waldron和Caridy Patiño提出的Symbol作为WeakMap键提案将未注册的Symbol添加到允许的键列表中。

const weak = new WeakMap();
const key = Symbol("ref");
weak.set(key, "ECMAScript 2023");
​
console.log(weak.get(key));
// ECMAScript 2023

通过复制改变数组

Array.prototype 上的 reverse()、sort() 和 splice() 方法会就地突变数组。Ashley Claymore 和 Robin Ricard 提出的 Change Array by Copy proposal 添加了 toReversed()、toSorted() 和 toSpliced() 方法的副本,它们会返回一个新的数组。此提议还添加了一个 with() 方法,该方法返回一个新数组,其中给定索引处的元素用给定值替换,以避免使用括号表示法进行就地突变。

const original = [1, 2, 3, 4];
const reversed = original.toReversed();
​
console.log(original);
// [ 1, 2, 3, 4 ]
​
console.log(reversed);
// [ 4, 3, 2, 1 ]
const original = [1, 3, 2, 4];
const sorted = original.toSorted();
​
console.log(original);
// [ 1, 3, 2, 4 ]
​
console.log(sorted);
// [ 1, 2, 3, 4 ]
const original = [1, 4];
const spliced = original.toSpliced(1, 0, 2, 3);
​
console.log(original);
// [ 1, 4 ]
​
console.log(spliced);
// [ 1, 2, 3, 4 ]
const original = [1, 2, 2, 4];
const withThree = original.with(2, 3);
​
console.log(original);
// [ 1, 2, 2, 4 ]
​
console.log(withThree);
// [ 1, 2, 3, 4 ]