015.精读 TC39 与 ECMAScript 提案.md
-
stage0
strawman
(任何想法讨论改变都可以在这个阶段提交到提案上,前提是你是 TC39 成员) -
stage1
proposal
(产出正式提案,发现潜在问题,提案包含详细 API 描述,例子,相关语义和算法) -
stage2
draft
(提供初始草案规范,与最终标准包含特性不会有太大差,草案后原则上只接受增量修改,同时开始实验如何实现,包括polyfill
.实现引擎,执行本地支持
,编译转换(babel)
) -
stage3
candidate
(候选阶段,获得具体实现和用户反馈,没有重大问题不能修改), 需要提供完整文档,评审人和 ECMAScript 编辑要在规范签字,同时至少一个浏览器实现,提供 polyfill 或 babel 插件 -
stage4
finished
(准备就绪,特性在下版 ES 会出现, 需要有两个独立实现和通过验收测试,获取使用过程中的事件经验)
-
使用特性途径
-
babel 插件
babel-presets-stage-0
(0~4);
Array.prototype.includes()
Exponentiation operator ** 乘方符号
Object.values()/Object.entries() // 值和键值对行为
String.prototype.padStart/ String.prototype.padEnd 字符串补齐行为
"foo.padStart(5, "bar")" // bafoo 字符串头开始补齐,第一个参数是补齐后字符串位数
"foo".padEnd(5,"bar") // fooba 字符串尾开始补齐
Object.getOwnPropertyDescriptors // 获取对象自身属性
Trailing commas in function parmeter lists and calls 参数逗号自动检测支持
Async function
Shared memory and atomics // ArrayBuffer
Lifting template literal restriction // styled-components 使用较多
styled.div`
background-color: red;
`
styled.div = text => {}
Function.prototype.toStirng revision
global 生态问题,对于浏览器和 Nodejs 环境整体生态影响
Rest/Spread Properties 展开运算符对象属性
let {x, y , ..z} = {x: 1, y: 2, a: 3, b: 4}
z; // {a: 3, b: 4}
Asychronous Iteration
const { value, done } = syncIterator.next();
asyncIterator.next().then(({ value, done }) => /* ... */);
- 异步迭代器实现了 async await 和 generator 的结合, 然而 async await 使用 generator 的 sugar,这种方式容易混淆 await 和 generator 之前的关系,有待斟酌
import()
import(`./section-modules/${link.dataset.entryModule}.js`)
.then(module => {
module.loadPageInfo(main)
})
.catch(err => {
main.textContent = {name: err.name, message: err.message}
})
- 提供函数调用版的 import, webpack 等构建工具在积极实现侧规范并作为动态加载的最佳范例,希望官方 Amd 可以加入草案
RegExp Lookbehind Assertions // 正则表达式后行断言
RegExp Unicode Property Escapes 其他编码正则支持
s(dotAll) flag for RegExp 标识符
/s
匹配任何值
Legacy RegExp features in JS 正则表达式遗留问题
funciton.send metaproperty // generator 的第一个.next 参数被抛弃(wired)
String.prototype.{trimStart, trimEnd}
Class Fidlds
Promise.prototype.finally() // 現在已經用上了
Class and property Decorators // @ 装饰器, 后端框架 nestjs
Arbitrary-percision Integers Integer -> BigInt 已实现
import.meta // 获取当前模块域信息
Date.parse() 字符串格式化日期在不同浏览器上有不同的实现,希望有规范出来
Observable 可观察类型
of and from on collection constructors // Set Map 类型的 of from 方法
Generator arrow functions (=>*)
Promise.try()
Error stacks // Error.prototype.stack 作为标准,对错误上报和分析十分有用,支持
- 不同草案对语义化、无障碍、性能、拓展语法、连接 nodejs 方面都很有帮助,虽然部分提案在语言设计角度是错误的,但是多端 JS 的遇到不同的问题比任何语言都复杂,所以每个提案都是在实践中遇到的问题,能在草案上与大家进行讨论,道路光明~