关于ECMA TC39
这是一个ECMA TC39的会议纪要。ECMA TC39 的全称是 ECMA Technical Committee 39,即 ECMA国际技术委员会39。它是 ECMA国际组织 的一个技术委员会,负责 ECMAScript 标准的制定和维护,也就是我们熟知的 JavaScript 语言的标准化工作。
ECMA TC39(ECMA技术委员会39)诞生于 1996年,其起源可以追溯到 JavaScript 语言的开发和标准化过程。
TC39会议通常每年召开6次,大约每两个月一次。会议一般持续3到4天,旨在讨论和推进JavaScript语言的发展及相关提案的进展。
TC39成员包括浏览器厂商(如谷歌、微软、Mozilla)、技术公司(如Meta、Netflix)、社区项目(如Babel、TypeScript)、学术机构等代表。也可能包含特定领域的外部专家。
会议的主要主要议程:
- 提案的讨论与表决(如进入下一个阶段)。
- JavaScript规范问题的修订。
- 浏览器引擎、工具链的反馈及开发进展。
- 语言特性使用数据分析和社区讨论。
每个变更都会经历多个阶段,具体如下:
-
- Stage 0: Strawman 提出初步想法,供委员会讨论。
-
- Stage 1: Proposal 明确问题和解决方案,进入正式提案。
-
- Stage 2: Draft 设计初步稳定,提供规范草案。
-
- Stage 3: Candidate 规范完成,收集实现反馈。
-
- Stage 4: Finished 提案最终定稿,纳入标准。
这就是提案从构想到标准的完整流程!提案从 Stage 0 到 Stage 4 完成整个流程的时间不固定,通常需要 1到3年,甚至更长。
从下面的介绍,我们还会看到stage2.7,它并不是 TC39 官方标准提案流程中的一个正式阶段,但通常用于内部讨论或作为阶段性标记,帮助开发者和参与者了解提案的进展。
例如,某个提案在 Stage 2 阶段时,可能会经历多个版本的草案(例如 2.0、2.1、2.7 等),每个小版本表示细节上的逐步完善,直到准备好进入 Stage 3。
除此之外ECMA也有其他会议,如ECMAScript Working Groups(工作组会议)、Annual ECMAScript Summit(年度 ECMAScript 峰会)、ECMAScript 版本发布会议。
第105届TC39会议
本次是第105届TC39会议,具体的更新内容如下:
阶段 4
Intl.DurationFormat
提供了一种以区域设置敏感的方式格式化持续时间(例如,"1小时,30分钟")的方法。
javascript
new Intl.DurationFormat("fr-FR", { style: "long" }).format({
hours: 1,
minutes: 46,
seconds: 40,
});
// => "1 heure, 46 minutes et 40 secondes"
阶段 3
Error.isError
添加了一个静态的isError
方法,用于检查给定的值是否是Error
对象的实例。
javascript
Error.isError(undefined); // false
Error.isError(new Error()); // true
阶段 2.7
ESM Phase Imports
增强了ECMAScript模块(ESM)系统,引入了新的导入能力,以简化模块间依赖声明。
javascript
import source myModule from "./my-module.js";
// `{ type: 'module' }` 可以推断,因为myModule是一个模块对象
const worker = new Worker(myModule);
P.S: 注意这是有条件的批准。
阶段 2
Immutable ArrayBuffer
引入了不可变的ArrayBuffer
概念,以防止在创建后对二进制数据进行更改。
javascript
Object.freeze(new Uint8Array(buf.transferToImmutable()));
Intl Currency Display Choices
扩展了显示货币值的选项,例如添加对货币符号和代码样式的控制。
javascript
const formal = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "formalSymbol",
});
formal.format(42); // "US$42.00"
const never = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "never",
});
never.format(42); // "42.00"
阶段 1
Import Sync
为ES模块提供了一个明确的同步导入函数,建立在Defer Import Eval提案定义的同步执行行为之上。
javascript
let react;
try {
react = import.sync('react');
} catch {}
if (react) {
// 如果可用,绑定到React框架
}