关于ECMA TC39

https://github.com/tc39/agendas/blob/main/2024/12.md

这是一个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规范问题的修订。
  • 浏览器引擎、工具链的反馈及开发进展。
  • 语言特性使用数据分析和社区讨论。

每个变更都会经历多个阶段,具体如下:

    1. Stage 0: Strawman
      提出初步想法,供委员会讨论。
    1. Stage 1: Proposal
      明确问题和解决方案,进入正式提案。
    1. Stage 2: Draft
      设计初步稳定,提供规范草案。
    1. Stage 3: Candidate
      规范完成,收集实现反馈。
    1. 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分钟”)的方法。

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对象的实例。

Error.isError(undefined); // false
Error.isError(new Error()); // true

阶段 2.7

ESM Phase Imports

增强了ECMAScript模块(ESM)系统,引入了新的导入能力,以简化模块间依赖声明。

import source myModule from "./my-module.js";
// `{ type: 'module' }` 可以推断,因为myModule是一个模块对象
const worker = new Worker(myModule);

P.S: 注意这是有条件的批准。

阶段 2

Immutable ArrayBuffer

引入了不可变的ArrayBuffer概念,以防止在创建后对二进制数据进行更改。

Object.freeze(new Uint8Array(buf.transferToImmutable()));

Intl Currency Display Choices

扩展了显示货币值的选项,例如添加对货币符号和代码样式的控制。

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提案定义的同步执行行为之上。

let react;
try {
  react = import.sync('react');
} catch {}
if (react) {
  // 如果可用,绑定到React框架
}

本文由mdnice多平台发布


Miniwa
29 声望1 粉丝