作为前端你应该知道的TC39会议

关于ECMA TC39

github.com/tc39/agenda...

这是一个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分钟")的方法。

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框架
}
相关推荐
卸任3 小时前
Vibe coding工具使用心得
前端·ai编程
brien93 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance4 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M4 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写4 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李4 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易4 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马4 小时前
前沿视界
前端
kyriewen4 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易5 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员