TC39-远不只是JavaScript的创世神

TC39是什么

用他们自己的介绍。

TC39是由JavaScript的开发者、制订者、学者等等组成的,通过跟社区的合作来维护并发展JavaScript的组织。而JS的创造者自然是TC39中的一员。当然都是帮他填坑的^_^。

工作内容就是在Github上制订JavaScript(实际上是 ECMAScript)的规范,并且每两个月会开会来讨论提案。

实际上JavaScript的新规范从开始构想到最后落地在TC39的流程里有5个阶段 从 stage-0 到 stage-4 。比如我们想在babel里变使用 js decorator (就是有名的状态管理框架mobx大量使用的语法),在没有配置好babelrc的情况下会出错,这时候就需要指明支持stage-2 因为现在 js decorator 也就是 class 装饰器还在 stage-2 的阶段。

js新特性的进度

js的版本,es6,es7,es8,es10,es2015,es2017等等,确实比较乱。对于我而言目前来说es2015也就是es6是一个很重要的阶段。再往后当然有很重要的特性比如 async/await 我印象中是es7的,就记不清容易混乱了。所以就倾向于把js特性所在的stage阶段记下就好了。基本到了stage-3就差不多定稿了。之前的话还是有使用风险的。

stage-0 'Strawperson' (稻草人的意思^_^)

stage-1 'Proposal' (提议) 简单说是要有一些案例,对解决方案有一个大致的形状,要明确潜在的挑战。

stage-2 'Draft' (草案) 要用正式并且详细的语言详细的描述语法和语义。

stage-3 'Candidate' (候选) 通过用户和实际案例的反馈继续精炼。

stage-4 'Finished' (结束) 新特性已经准备好采纳进ECMAScript标准了。

具体见官方链接,有非常详细的每个阶段该到什么程度的描述。

<code>https://tc39.es/process-document/\t/<code>

空值合并运算符 Nullish Coalescing

这是最近刚进入stage-4的一个提案,2018年开始进入stage-2的讨论阶段。2019年末顺利进入stage-4,期间因为各种写法变化有过讨论。 最后定稿为 ?? 没错,就是两个问号。这是一个对于业务代码来讲非常实用的功能。

JavaScript 里的 空 会让新手和其他语言转来的人非常郁闷。null , undefined , 0 , '' 。他们之间的 == 运算结果往往出人意料啊。

对于写业务代码前后端交互的时候,判断空值来选择性显示结果的时候往往会这么做

<code>const forDisplay = response.data || 'there is no message' // 0 || 'message' => 'message'/<code>

但是 假如 response.data 结果是 0 并且 这个 0 其实是一个 有意义的 (比如金钱)0 的概念,显示no message 就会产生逻辑判断的错误。所以很多框架都是自己写空的判断。

<code>const forDisplay = response.data ?? 'there is no message' // 0 ?? 'message' => 0/<code>

这样做 '' 和 0 就不会被当作空 , 以防业务判断上的错误。

本质上就是对 undefined 和 null 做了合并处理。

Optional Chaining

这也是一个刚进入stage-4的一个提案,它的大部分使用场景跟 ?? 比较接近。叫选择链?好像有些怪,先不翻译了。

在前后端的交互中,想要的结果往往是被嵌套的,普遍在第三层。那么这里就有了一个判断的问题。

<code>const message = res.result.message // 如果 后端因为空的关系 没有 result这个属性,这段代码就会报错
const message = res.result && res.result.street; //所以往往会这么写,先保证有result这个属性再取值/<code>

有了 Optional Chaining 可以这样进行简化

<code>const message = res.result?.message // 如果没有result属性则返回 undefiend
const message = res.result?.['message'] //也可以这么做,这里不能省略掉 . 请注意/<code>



野码无缰 , 代码虽讲究优雅 , 还是服务于功能 。


TC39-远不只是JavaScript的创世神


分享到:


相關文章: