作为前端你应该知道的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框架
}
相关推荐
深念Y15 分钟前
我明白为什么B站没法在浏览器开直播了——Windows Chrome推流踩坑全记录
前端·chrome·webrtc·浏览器·srs·直播·flv
zhangxingchao26 分钟前
AI应用开发七:可以替代 RAG 的技术
前端·人工智能·后端
Sun@happy41 分钟前
现代 Web 前端渗透——基础篇(1)
前端·web安全
希冀1231 小时前
【CSS学习第十一篇】
前端·css·学习
隔窗听雨眠1 小时前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
kyriewen1 小时前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
excel2 小时前
🧠 Prisma 表名大写 vs SQL 导出小写问题深度解析(附踩坑与解决方案)
前端·后端
周淳APP2 小时前
【前端工程化原理通识:从源头到运行时的理论阐述】
前端·编译·打包·前端工程化
五点六六六2 小时前
你敢信这是非Native页面写出来的渐变效果吗🌝(底层原理解析
前端·javascript·面试
tedcloud1232 小时前
TradingAgents部署教程:打造AI量化分析工作流
服务器·前端·人工智能·系统架构·edge