最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 全网最全 ECMAScript 攻略 | 创作者训练营第二期

    正文概述 掘金(清秋)   2021-04-24   617

    另:祝贺我国首个 JS 语言提案在 ECMA 进入 Stage 3。

    ECMAScript 历史

    我们首先来看 ECMA 是什么。ECMA,读音类似“埃科妈”,是欧洲计算机制造商协会(European Computer Manufacturers Association)的简称,是一家国际性会员制度的信息和电信标准组织。1994 年之后,由于组织的标准牵涉到很多其他国家,为了体现其国际性,更名为 Ecma 国际(Ecma International),因此 Ecma 就不再是首字母缩略字了。

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    了解了这段历史,为了技术写的专业性,如果文章中提到 Ecma 的时候,可以写成 Ecma 或者 ecma,不要写成 ECMA,除非是 ECMAScript 或 ECMA-XXX 这类专有名词。

    1995 年,著名的网景公司(Netscape)的 Brendan Eich 开发了一种脚本语言,最初命名为 Mocha,后来改名为 LiveScript,最后为了蹭当时火热的 Java 热度重命名为了 JavaScript。

    了解了 Ecma 国际和 JavaScript,就方便了解 ECMAScript 了,ECMAScript 是一种由 Ecma 国际在标准 ECMA-262 中定义的 脚本语言 规范。这种语言在往往被称为 JavaScript 或 JScript ,但实际上 JavaScript 和 JScript 是 ECMA-262 标准的实现和扩展。

    神秘的 ECMA-262

    上文提到了第一个神秘代码 ECMA-262,ECMA-262 到底是什么呢?原来 Ecma 国际的标准,都会以 Ecma-Number 命名,ECMA-262 就是 ECMA 262 号标准,具体就是指 ECMAScript 遵照的标准。1996 年 11 月,网景公司将 JavaScript 提交给 Ecma 国际进行标准化。ECMA-262 的第一个版本于 1997 年 6 月被 Ecma 国际采纳。

    尽管 JavaScript 和 JScript 与 ECMAScript 兼容,但包含超出 ECMAScript 的功能。

    我们如何查看最新最全的 Ecma 标准呢,可以查看 Ecma 国际官网的 Standards。截止到 2021 年 4 月,最新的 Ecma 标准已经到了 ECMA-418。

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    Ecma 标准涉及的类别非常多,官网因此提供了按照类别和最新修改排序的功能,我们来看看 ECMA-262 属于哪个类别:

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    ECMA-262 属于“软件工程与接口”类别,该类别一共有 12 个标准,详见上图。注意,ECMA-262 的最新更新日期是 2020 年 6 月,并且会在今年 6 月进行更新,更新之后,ES2021 就会成为 ECMA 标准。

    探秘 Ecma TC39 神秘组织

    揭开了 Ecma-262 神秘面纱之后,我们来探秘一个代号名为 TC39 的神秘组织。

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    其实官网解释的已经很清楚了,我用中文简要概括下:

    TC39 是 Technical Committee 39 的简称,是制定 ECMAScript 标准的委员会,由各个主流浏览器厂商的代表构成,主席团三人分别来自 PayPal、Bloomberg 和 Microsoft,下设两个工作组(task group) TC39-TG1 和 TC39-TG2 。

    TC39-TG1 工作组主要工作是通用 ECMAScript® 语言, 包括语法、语义、类库以及支持该语言的技术。

    TC39-TG2 工作组 ECMAScript® 国际化 API 标准。

    我们经常会看到类似的新闻:XX 公司成为 Ecma TC39 成员。想要加入 TC39 会议,必须先成为 Ecma 会员:

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    那 Ecma 到底有哪些成员呢?Ecma 官网给出了答案:

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    几大巨头赫然在列!看到这里,发现一共有 5 种类别,分别是 Ordinary members、Associate members、SME members、SPC members、NFP members,我们来看 Ordinary members 和 Associate members 的对比:

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    Associate members 没有 Ecma 大会(General Assembly)的投票权!在 Associate members 中,我国的阿里巴巴、华为、腾讯、360 赫然在列。

    Wait,CHF 70000,这是 70000 法郎?Ecma 果然是欧洲豪门,顶级会员年费接近 50 万人民币。算了一下 Ecma 国际会员费收入每年就有 1,134,000 法郎,约 800 万人民币。

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    了解更多关于 TC39 的内容,可以探索其官网 TC39 – Specifying JavaScript. 和 GitHub 仓库 Ecma TC39 · GitHub,注意这个仓库很重要。查看一下 members,发现了 月影、李松峰 和 元彦 三位国内大佬。

    我们熟悉的 ES6

    探究完神秘的 ECMA-262 和 TC39 之后,我们缓口气,来看看我们最为熟悉的 ESX 家族。

    上文提到 ECMAScript 是由 Ecma 国际在标准 ECMA-262 中定义的脚本语言规范。到 2015 年,一共发布了 1、2、3、4、5、5.1、6 共 7 个版本(其中 4 被废弃)。

    我们常把 5.1 之前的 ECMAScript 版本统称做 ES5,将 6 版本之后的版本统称做 ES6(因为从 2015 年起,ECMAScript 终于步入正轨,每年发布一次版本,到了 2021 年,已经发布了 6 个版本了,实在太多,所以用变革了 JavaScript 时代的 ES6 作为后续版本的代称)。

    划重点,Web 前端招聘的 JD 中,经常出现的 ES6,不仅仅是 ES2015 这个版本,而是指代 ES2015 和其后每年发布的 ECMAScript 版本

    从 ECMAScript 第 6 版开始,每年发布一个 ECMAScript 版本,因此 ECMAScript 版本有了很多名字,包括全名 ECMAScript 6、简写 ES6、年份命名 ECMAScript 2015、年份简写 ES2015。最常见的名字还是 ES6,之后推出的 ES7、ES8 等同理。

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    需要注意的是,自从 TC39 进程 制定以来,ECMAScript 版本的重要性就降低了很多。大家不必记住某一个 ES 特性到底是哪年推出的。现在真正重要的是提案处于哪个阶段:一旦提案到了第 4 阶段,那么它就可以使用了。但是即使这样,你仍然需要检查你的引擎是否支持该功能。

    这里又提到了一个 TC39 进程 和阶段(Stage)的概念,我们接下来看看这两个概念是什么含义。

    TC39 进程和 Stage X

    TC39 进程 故名思义,肯定是 TC39 组织发布的一个进程。随着 ECMAScript 6 的发布,当时的发布流程出现了两个明显的问题:

    • 如果在两个 release 之间多次通过早已准备好的功能,势必在其 release 之前等待很长一段时间。而且功能准备如果很晚,会增加 deadline 之前匆忙赶工的风险。
    • 很多功能在其实现和使用之前就花了很长时间在设计上,发现与实现和使用相关的设计缺陷会非常晚。

    为了解决上述问题, TC39 建立了新的 TC39 进程:

    • ECMAScript 功能设计与每年的 ECMAScript 版本发布独立,使用不同阶段(Stage)来区分功能的状态,共 5 个阶段,从 Stage 0(strawman)开始,到 Stage 4 (finished)结束。
    • 越往后的阶段,需要原型实现和真机测试,可以建立设计和实现之间的反馈机制。
    • ECMAScript 版本每年发布一次,发布的内容包含在 release deadline 之前的全部到达 Stage 4 的功能。

    全网最全 ECMAScript 攻略 | 创作者训练营第二期

    • Stage 0:代号“稻草人(strawman)”,草案阶段
    • Stage 1:代号“提案(proposal)”, TC39 帮助阶段
    • Stage 2:代号“草案(draft)”, 本阶段很有可能成为标准
    • Stage 3:代号“候选(candidate)”, 已完成,需要从实现中获得反馈
    • Stage 4:代号“结束(finished)”, 准备成为标准

    理解了 Stage 各阶段的含义,就能理解我国首个 JS 语言提案在 ECMA 进入 Stage 3这个新闻的意义了。

    如何查看各阶段的提案呢?可以查阅 GitHub - tc39/ecma262: Status, process, and documents for ECMA-262 这个 repo。

    历届 ES 特性全收录 ES2016 - ES2022

    网上有太多零散的 ES 特性总结,很多同学想知道,有官方的 ECMAScript 功能列表吗

    当然有,TC39 仓库列出了 已完成提案 以及它们的版本。

    虽然 6 年过去,但是新增的 ES 功能其实并不多,截至 2021 年 4 月 23 日,包括草案的功能,一共 39 个

    ES2016

    • Array.prototype.includes

      • 作者:Domenic Denicola
      • 维护者:Domenic Denicola、Rick Waldron
      • TC39 会议记录: November 2015
      • 发布时间:2016
    • Exponentiation operator

      • 作者:Rick Waldron
      • 维护者:Rick Waldron
      • TC39 会议记录: January 2016
      • 发布时间:2016

    ES2017

    • Object.values/Object.entr…

      • 作者:Jordan Harband
      • 维护者:Jordan Harband
      • TC39 会议记录: March 2016
      • 发布时间:2017
    • String padding

      • 作者:Jordan Harband
      • 维护者:Jordan Harband、Rick Waldron
      • TC39 会议记录: May 2016
      • 发布时间:2017
    • Object.getOwnPropertyDescriptors

      • 作者:Jordan Harband、Andrea Giammarchi
      • 维护者:Jordan Harband、Andrea Giammarchi
      • TC39 会议记录:May 2016
      • 发布时间:2017
    • Trailing commas in function parameter lists and calls

      • 作者:Jeff Morrison
      • 维护者:Jeff Morrison
      • TC39 会议记录: July 2016
      • 发布时间:2017
    • Async functions

      • 作者:Brian Terlson
      • 维护者:Brian Terlson
      • TC39 会议记录:July 2016
      • 发布时间:2017
    • Shared memory and atomics

      • 作者:Lars T Hansen
      • 维护者:Lars T Hansen
      • TC39 会议记录: January 2017
      • 发布时间:2017

    ES2018

    • Lifting template literal restriction

      • 作者:Tim Disney
      • 维护者:Tim Disney
      • TC39 会议记录: March 2017
      • 发布时间:2018
    • s (dotAll) flag for regular expressions

      • 作者:Mathias Bynens
      • 维护者:Brian Terlson、Mathias Bynens
      • TC39 会议记录: November 2017
      • 发布时间:2018
    • RegExp named capture groups

      • 作者:Gorkem Yakin、Daniel Ehrenberg
      • 维护者:Daniel Ehrenberg、Brian Terlson、Mathias Bynens
      • TC39 会议记录: November 2017
      • 发布时间:2018
    • Rest/Spread Properties

      • 作者:Sebastian Markbåge
      • 维护者:Sebastian Markbåge
      • TC39 会议记录: January 2018
      • 发布时间:2018
    • RegExp Lookbehind Assertions

      • 作者:Gorkem Yakin、Nozomu Katō、Daniel Ehrenberg
      • 维护者:Daniel Ehrenberg、Mathias Bynens
      • TC39 会议记录: January 2018
      • 发布时间:2018
    • RegExp Unicode Property Escapes

      • 作者:Mathias Bynens
      • 维护者:Brian Terlson、Daniel Ehrenberg、Mathias Bynens
      • TC39 会议记录: January 2018
      • 发布时间:2018
    • Promise.prototype.finally

      • 作者:Jordan Harband
      • 维护者:Jordan Harband
      • TC39 会议记录 :January 2018
      • 发布时间:2018
    • Asynchronous Iteration

      • 作者:Jordan Harband
      • 维护者:Jordan Harband
      • TC39 会议记录 :January 2018
      • 发布时间:2018

    ES2019

    • Optional catch binding

      • 作者:Michael Ficarra
      • 维护者:Michael Ficarra
      • TC39 会议记录 : May 2018
      • 发布时间:2019
    • JSON superset

      • 作者:Richard Gibson
      • 维护者:Mark Miller、Mathias Bynens
      • TC39 会议记录: May 2018
      • 发布时间:2019
    • Symbol.prototype.description

      • 作者:Michael Ficarra
      • 维护者:Michael Ficarra
      • TC39 会议记录: November 2018
      • 发布时间:2019
    • Function.prototype.toString revision

      • 作者:Michael Ficarra
      • 维护者:Michael Ficarra
      • TC39 会议记录:November 2018
      • 发布时间:2019
    • Object.fromEntries

      • 作者:Darien Maillet Valentine
      • 维护者:Jordan Harband、Kevin Gibbons
      • TC39 会议记录:January 2019
      • 发布时间:2019
    • Well-formed JSON.stringify

      • 作者:Richard Gibson
      • 维护者:Mathias Bynens
      • TC39 会议记录: January 2019
      • 发布时间:2019
    • String.prototype.{trimStart,trimEnd}

      • 作者:Sebastian Markbåge
      • 维护者:Sebastian Markbåge、Mathias Bynens
      • TC39 会议记录: January 2019
      • 发布时间:2019
    • Array.prototype.{flat,flatMap}

      • 作者:Brian Terlson、Michael Ficarra、Mathias Bynens
      • 维护者:Brian Terlson、Michael Ficarra
      • TC39 会议记录: January 2019
      • 发布时间:2019

    ES2020

    • String.prototype.matchAll

      • 作者:Jordan Harband
      • 维护者:Jordan Harband
      • TC39 会议记录: March 2019
      • 发布时间:2020
    • BigInt

      • 作者:Daniel Ehrenberg
      • 维护者:Daniel Ehrenberg
      • TC39 会议记录: June 2019
      • 发布时间:2020
    • Promise.allSettled

      • 作者:Jason Williams、Robert Pamely、Mathias Bynens
      • 维护者:Mathias Bynens
      • TC39 会议记录: July 2019
      • 发布时间:2020
    • globalThis

      • 作者:Jordan Harband
      • 维护者:Jordan Harband
      • TC39 会议记录: October 2019
      • 发布时间:2020
    • for-in mechanics

      • 作者:Kevin Gibbons
      • 维护者:Kevin Gibbons
      • TC39 会议记录: December 2019
      • 发布时间:2020
    • Optional Chaining

      • 作者:Gabriel Isenberg、Claude Pache、Dustin Savery
      • 维护者:Gabriel Isenberg、Dustin Savery、Justin Ridgewell、Daniel Rosenwasser
      • TC39 会议记录: December 2019
      • 发布时间:2020
    • Nullish coalescing Operator

      • 作者:Gabriel Isenberg
      • 维护者:Gabriel Isenberg、Justin Ridgewell、Daniel Rosenwasser
      • TC39 会议记录:December 2019
      • 发布时间:2020
    • import.meta

      • 作者:Domenic Denicola
      • 维护者:Gus Caplan
      • TC39 会议记录: March 2020
      • 发布时间:2020

    ES2021

    • String.prototype.replaceAll

      • 作者:Peter Marshall、Jakob Gruber、Mathias Bynens
      • 维护者:Mathias Bynens
      • TC39 会议记录: June 2020
      • 预计发布时间:2021
    • Promise.any

      • 作者:Mathias Bynens、Kevin Gibbons、Sergey Rubanov
      • 维护者:Mathias Bynens
      • TC39 会议记录: July 2020
      • 预计发布时间:2021
    • WeakRefs

      • 作者:Dean Tribble、Sathya Gunasekaran
      • 维护者:Dean Tribble、Mark Miller、Till Schneidereit、Sathya Gunasekaran、Daniel Ehrenberg
      • TC39 会议记录: July 2020
      • 预计发布时间:2021
    • Logical Assignment Operators

      • 作者:Justin Ridgewell
      • 维护者:Justin Ridgewell、Hemanth HM
      • TC39 会议记录: July 2020
      • 预计发布时间:2021
    • Numeric separators

      • 作者:Sam Goto、Rick Waldron
      • 维护者:Sam Goto、Rick Waldron、Leo Balter
      • TC39 会议记录: July 2020
      • 预计发布时间:2021

    ES2022

    • Class Fields ( Private instance methods and accessors , Class Public Instance Fields & Private Instance Fields , Static class fields and private static methods )
      • 作者:Daniel Ehrenberg
      • 维护者:Daniel Ehrenberg、Kevin Gibbons
      • TC39 会议记录:April 2021
      • 预计发布时间:2022

    结语

    授人以鱼,不如授人以渔,希望通过本文追根溯源,带领同学们走进 ECMAScript 的世界,ES 神秘代码不再神秘,ES 新特性不再彷徨。

    我是清秋,一个有着教师梦的 Web 前端非典型程序员。公众号 Frontend Radio 刚刚起步,期待我的文章能够帮助到更多同学,让我们一起成长,早日成为 Frontend Master。

    参考资料

    • Ecma国际 - 维基百科,自由的百科全书
    • History and evolution of JavaScript
    • 【译】ECMAScript 2021: 最终功能集确定

    起源地下载网 » 全网最全 ECMAScript 攻略 | 创作者训练营第二期

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元