大家好,我是 CUGGZ。
2023 年 1 月 30 日至 2 月 2 日,第 94 次 TC39 会议在线举行,下面来看看在这次会议中哪些 ECMAScript 提案取得了新进展!
TC39 是一个推动 JavaScript 发展的技术委员会,由各个主流浏览器厂商的代表构成,其主要工作就是制定 ECMAScript 标准。TC39 每两个月举行一次会议。
对于新提案,从提出到最后被纳入 ECMAScript 新特性,TC39 的规范中分为五步:
- stage0(strawman),任何TC39的成员都可以提交。
- stage1(proposal),进入此阶段就意味着这一提案被认为是正式的了,需要对此提案的场景与API进行详尽的描述。
- stage2(draft),这一阶段的提案如果能最终进入到标准,那么在之后的阶段都不会有太大的变化,因为理论上只接受增量修改。
- state3(candidate),这一阶段的提案只有在遇到了重大问题才会修改,规范文档需要被全面的完成。
- state4(finished),这一阶段的提案将会被纳入到ES每年发布的规范之中。
Stage 4
- Change Array by Copy[1]:在 Array.prototype 和 TypedArray.prototype 上提供额外的方法(toReversed()、toSorted()、toSpliced()、with()),通过返回数组的新副本和更改来启用数组的更改,避免再操作数组时修改原数组;
- Intl.NumberFormat V3[2]:扩展Intl.NumberFormat,解决一些痛点问题。
- Symbols as WeakMap keys[3]:允许 Symbol 作为 WeakMaps 中的键,并在 WeakRef 和 FinalizationRegistry 中支持 Symbol。
Stage 3
- ArrayBuffer transfer[4]:建议添加“ArrayBuffer.prototype.transfer”(transfer,transferToFixedLength,detached),用以转移 ArrayBuffers 的所有权、优化重新分配以及将可调整大小的 ArrayBuffers 固定为固定长度的 ArrayBuffers。
Stage 2
- Import Assertions[5]:使用断言导入 ES 模块的语法提案,用以解决模块类型与其MIME类型不符的情况(注意:该提案已从第 3 阶段降级);
- Intl era/monthCode[6]:Temporal 仅对 ISO8601 时间格式与 UTC 时区下的行为做了明确定义,对 ISO8601 以外的时间格式和 UTC 以外的时区,只提供了最基本的定义,该提案旨在对这些规范细节进行进一步的完善;
- Symbol Predicates[7]:提出了两个区分 symbol 的方法:Symbol.isRegistered(symbol)、Symbol.isWellKnown(symbol);
Stage 1
- Async Context[8]:提供一种机制来跟踪 JavaScript 中的异步上下文,它影响目前 Node.js Async Hooks,Async Storage 等能力的性能和接口,对 Node.js 无感知链路追踪的实现有着重大意义。
- Proto pollution mitigation[9]:通过引入一种安全模式来防止原型污染,该模式只允许通过方法或 symbol 键访问原型,而不是字符串属性键。这旨在通过使原型更难被恶意操纵来提高安全性。
提案链接
[1] Change Array by Copy: https://github.com/tc39/proposal-change-array-by-copy
[2] Intl.NumberFormat V3: https://github.com/tc39/proposal-intl-numberformat-v3
[3] Symbols as WeakMap keys: https://github.com/tc39/proposal-symbols-as-weakmap-keys
[4] ArrayBuffer transfer: https://github.com/tc39/proposal-arraybuffer-transfer
[5] Import Assertions: https://github.com/tc39/proposal-import-assertions
[6] Intl era/monthCode: https://github.com/tc39/proposal-intl-era-monthcode
[7] Symbol Predicates: https://github.com/tc39/proposal-symbol-predicates
[8] Async Context: https://github.com/tc39/proposal-async-context
[9] Proto pollution mitigation: https://github.com/syg/proposal-symbol-proto
往期推荐: