Skip to content

Latest commit

 

History

History
131 lines (76 loc) · 4.09 KB

15.精读TC39与ECMAScript提案.md

File metadata and controls

131 lines (76 loc) · 4.09 KB

015.精读 TC39 与 ECMAScript 提案.md

TC39 push JS development commitee

流程

  1. stage0 strawman (任何想法讨论改变都可以在这个阶段提交到提案上,前提是你是 TC39 成员)

  2. stage1 proposal (产出正式提案,发现潜在问题,提案包含详细 API 描述,例子,相关语义和算法)

  3. stage2 draft (提供初始草案规范,与最终标准包含特性不会有太大差,草案后原则上只接受增量修改,同时开始实验如何实现,包括polyfill. 实现引擎,执行本地支持,编译转换(babel))

  4. stage3 candidate (候选阶段,获得具体实现和用户反馈,没有重大问题不能修改), 需要提供完整文档,评审人和 ECMAScript 编辑要在规范签字,同时至少一个浏览器实现,提供 polyfill 或 babel 插件

  5. stage4 finished (准备就绪,特性在下版 ES 会出现, 需要有两个独立实现和通过验收测试,获取使用过程中的事件经验)

  • 使用特性途径

  • babel 插件 babel-presets-stage-0(0~4);

stage4 成员(截止 2019)

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 => {} 

stage3 成员

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 正则表达式遗留问题

stage2 成员

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 // 获取当前模块域信息

stage1 成员

Date.parse() 字符串格式化日期在不同浏览器上有不同的实现,希望有规范出来

Observable 可观察类型

of and from on collection constructors // Set Map 类型的 of from 方法

Generator arrow functions (=>*)

Promise.try()

Error stacks // Error.prototype.stack 作为标准,对错误上报和分析十分有用,支持

summary

  • 不同草案对语义化、无障碍、性能、拓展语法、连接 nodejs 方面都很有帮助,虽然部分提案在语言设计角度是错误的,但是多端 JS 的遇到不同的问题比任何语言都复杂,所以每个提案都是在实践中遇到的问题,能在草案上与大家进行讨论,道路光明~