ECMAScript 2023 新特性预览


ECMAScript 2023 的最终版本预计将于今年 6 月底发布。最新举行的一次 TC39 会议基本已经确定 了 ECMAScript 2023 的新功能列表,预计不会再有任何重大的编辑更改。

本文整理了在 2023 年进入 Stage 4 的几个提案。按照 TC39 的运作流程,每个提案都从 Stage 0 开始,进入 Stage 4 则意味 着该提案已被 ECMAScript 编辑签署同意意见,成为了事实上的标准特性。

Array find from last

提案ArrayTypedArray原型上增加了findLast()findLastIndex() 方法。它们与find()findIndex()做同样的事情,但顺序相反。这两个方法都很方便,可跳过创建临时的重复、突变和混乱的索引减法。

const isEven = (number) => number % 2 === 0;
const numbers = [1, 2, 3, 4];

// from first to the last lookup
console.log(numbers.find(isEven));
// 2
console.log(numbers.findIndex(isEven));
// 1

// from last to the first lookup
console.log(numbers.findLast(isEven));
// 4
console.log(numbers.findLastIndex(isEven));
// 3

Hashbang Grammar

Hashbang,也称为 shebang,是可执行脚本开头的字符序列,用于定义要运行的程序的解释器。当 Unix 内核的程序加载器执行 JavaScript 程序时,主机会剥离 hashbang 以生成有效源,然后再将其传递给引擎。Hashbang Grammar 提案标准化了它的完成方式。

 

#!/usr/bin/env node

console.log('hi 👋');

Symbols as WeakMap keys

在 JavaScript 中,Objects 和 Symbols 被保证是唯一并且不能被重新创建的,这使得它们都是WeakMapkeys 的理想候选者。以前的版本或规范只允许以这种方式使用 Objects ,但新的 Symbols as WeakMap keys 提案则提出将 non-registered Symbols 添加到允许的键列表中。

const weak = new WeakMap();
const key = Symbol("ref");
weak.set(key, "ECMAScript 2023");

console.log(weak.get(key));
// ECMAScript 2023

Change Array by Copy

Array.prototype上的reverse()sort()splice()方法就地改变数组。Change Array by Copy 提案添加了那些返回新 copy 方法的等价物—— toReversed()toSorted()toSpliced()。该提案还添加了一个with()方法,该方法返回一个新的数组,其中给定索引处的元素被替换为给定值,以避免使用 bracket notation 的就地突变。

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 ]

相關推薦

2021-11-18

特性: 实验性功能:在夜间版本支持  Node.js 运行 ECMAScript 模块从 node_modules 支持 lib新的 Awaited 类型和对 Promise 对象的优化模板字符串可以用作判断符引入 es2022 模块(可以在异步函数之外使用 await)移

2022-05-25

TypeScript 4.7 现已正式发布。 新特性概览 Node.js 中的 ECMAScript 模块支持 模块检测控制 括号内元素访问的控制流分析 改进的对象和方法中的函数推理 实例化表达式 infer类型变量的 extends Constraints 类型参数的 Opt

2024-07-05

ECMAScript 2024 现已获得 ECMA International 的批准。ECMAScript 是标准化的 JavaScript 语言,于 1997 年发布了第一版,现已发展成为世界上使用最广泛的通用编程语言之一。 本 Ecma 标准定义了 ECMAScript 2024 Language,是 ECMAScript 语

2022-06-29

ECMAScript 2022 现已获得 ECMA International 的批准。ECMAScript 是标准化的 JavaScript 语言,于 1997 年发布了第一版,现已发展成为世界上使用最广泛的通用编程语言之一。 本 Ecma 标准定义了 ECMAScript 2022 Language,是 ECMAScript 语

2022-11-19

一步减少配置开销,现在使用 .browserlist 来让你定义目标 ECMAScript 版本。 社区贡献 自 v14 发布以来,Angular 收到了 210 多人对框架、组件和 CLI 的贡献。 更多详情可查看:https://github.com/angular/angular/releases/tag/15.0.0

2022-12-02

版本是 Xfce 4.16 稳定系列的后续版本,增加了许多新特性,例如使用的 GTK 框架升级到了 GTK 4、初步支持 Wayland,以及对核心应用的改进等。 针对文件管理器 Thunar 的更新 Thunar 是 Xfce 的默认文件管理器。在 Xfce 4.18 中

2022-07-28

集已被冻结,将不再对 JEP 进行改动。 Java 19 只有 7 个新特性: 405: Record Patterns (Preview) 记录模式 422: Linux/RISC-V Port Linux/RISC-V 移植 424: Foreign Function & Memory API (Preview) 外部函数和内存 API  425:

2023-08-11

5.2 Beta 发布以来的变化: TypeScript 5.2 实现了即将推出的 ECMAScript 功能,称为装饰器元数据。此功能的关键思想是使装饰器可以轻松地在其使用的任何类上创建和使用元数据。 每当使用装饰器函数时,它们现在都可以访问其上

2023-01-12

段,3.12.0a4 是计划的七个 alpha 版本中的第四个,许多新特性仍在计划和编写之中。下面简单介绍与 3.11 相比,3.12 系列的主要新特性和变化: 改进错误信息,比如像用户建议更多可能由拼写错误引起的异常 支持 Linux&nbs

2024-10-22

0.0 主要更新亮点 默认启用ESM:在Node.js v23.0.0中,EcmaScript模块(ESM)现已默认启用,简化了应用使用。 停止支持32位Windows系统:在Node.js 23.0.0中,不再支持32位Windows,专注于现代环境。 稳定化--run命令:--run标志已

2023-08-26

p;(Inline Variable Refactoring) TypeScript 5.2 实现了即将推出的 ECMAScript 功能,称为装饰器元数据。此功能的关键思想是使装饰器可以轻松地在其使用的任何类上创建和使用元数据。 每当使用装饰器函数时,它们现在都可以访问其上

2023-10-15

预览版,不建议在生产环境中使用。 Python 3.13 的许多新特性仍在计划和编写中——包括备受关注的 no-GIL。到目前为止,最显著的变化是许多特性已被标记为弃用,其中大部分计划在 Python 3.15 或 3.16 中删除。 Python 3.13 的下一个

2022-02-28

sual Studio 17.1 和 .NET SDK 6.0.200 中体验,下面摘录一部分新特性作介绍: C# 11 预览:允许在内插字符串的“插值表达式”中换行 内插字符串(interpolated strings)是 C# 6.0 引入的语法,它允许在字符串中插入表达式。C# 的内

2023-06-08

聊天时共享位置、共享电量等... 其次还有一些有趣的特性,比如拨打电话的人可以自定义自己在对方手机显示的外观。 还有比较实用的是实时语音邮件,它会将电话另一端的语音转成文字,在开会之类不便播放声音的场景,