作为前端你应该知道的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框架
}
相关推荐
●VON22 分钟前
使用 Electron 构建天气桌面小工具:调用公开 API 实现跨平台实时天气查询V1.0.0
前端·javascript·electron·openharmony
码上成长25 分钟前
包管理提速:pnpm + Workspace + Changesets 搭建版本体系
前端·前端框架
Bigger29 分钟前
Tauri(十九)——实现 macOS 划词监控的完整实践
前端·rust·app
ganshenml1 小时前
【Web】证书(SSL/TLS)与域名之间的关系:完整、通俗、可落地的讲解
前端·网络协议·ssl
这是个栗子2 小时前
npm报错 : 无法加载文件 npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
HIT_Weston3 小时前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab
华仔啊3 小时前
Vue3 如何实现图片懒加载?其实一个 Intersection Observer 就搞定了
前端·vue.js
JamesGosling6663 小时前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
不要想太多4 小时前
前端进阶系列之《浏览器渲染原理》
前端
g***96904 小时前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js