ES6

234 阅读4分钟

1.ECMAScript 和 JavaScript 的关系

JavaScript历史:

  • 1996 年 11 月,JavaScript 的创造者 Netscape 公司,将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。
  • 次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版

不叫 JavaScript原因:

  • 一是商标,Java 是 Sun 公司的商标,根据授权协议,只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript 本身也已经被 Netscape 公司注册为商标
  • 二是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性

ECMAScript 和 JavaScript 的关系

前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 JScript 和 ActionScript)


2.ES6 与 ECMAScript 2015 的关系

  • ES5:ECMAScript 5.1 版
  • ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等
  • 而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准
  • 本书中提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”

3.语法提案的批准流程

  • 任何人都可以向标准委员会(又称 TC39 委员会)提案,要求修改语言标准
  • 一种新的语法从提案到变成正式标准,需要经历五个阶段
  • 每个阶段的变动都需要由 TC39 委员会批准
    • Stage 0 - Strawman(展示阶段)
    • Stage 1 - Proposal(征求意见阶段)
    • Stage 2 - Draft(草案阶段)
    • Stage 3 - Candidate(候选人阶段)
    • Stage 4 - Finished(定案阶段)

一个提案只要能进入 Stage 2,就差不多肯定会包括在以后的正式标准里面。 ECMAScript 当前的所有提案,可以在 TC39 的官方网站GitHub.com/tc39/ecma262查看。

4.ECMAScript 的历史

ES6 从开始制定到最后发布,整整用了 15 年!!!

  • 1997:ECMAScript 1.0
  • 1998.6:ECMAScript 2.0
  • 1999.12:ECMAScript 3.0
    • 3.0 版是一个巨大的成功:
      • 在业界得到广泛支持,成为通行标准
      • 奠定了 JavaScript 语言的基本语法,以后的版本完全继承
      • 直到今天,初学者一开始学习 JavaScript,其实就是在学 3.0 版的语法
  • 2000:ECMAScript 4.0 开始酝酿
    • 最后没有通过,大部分内容被 ES6 继承了
    • 因此,ES6 制定的起点其实是 2000 年
    • 为什么 ES4 没有通过呢?
      • 版本太激进,对 ES3 做了彻底升级,标准委员会部分成员不接受
      • ECMA 的第 39 号技术专家委员会(Technical Committee 39,简称 TC39)负责制订 ECMAScript 标准,成员包括 Microsoft、Mozilla、Google 等大公司
  • 2007.10:ECMAScript 4.0 版草案发布
    • 本来预计次年 8 月发布正式版本,发生严重分歧:
      • 以 Yahoo、Microsoft、Google 为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动;
      • 以 JavaScript 创造者 Brendan Eich 为首的 Mozilla 公司,则坚持当前的草案
  • 2008.7
    • 对于下一版本应该包括哪些功能,各方分歧太大,争论过于激烈,ECMA 开会决定:
      • 中止 ECMAScript 4.0 的开发:
      • 将其中涉及现有功能改善的一小部分,发布为 ECMAScript 3.1
      • 而将其他激进的设想扩大范围,放入以后的版本
      • 由于会议的气氛,该版本的项目代号起名为 Harmony(和谐)
      • 会后不久,ECMAScript 3.1 就改名为 ECMAScript 5
  • 2009.12
    • ECMAScript 5.0 版正式发布:
      • Harmony 项目则一分为二,一些较为可行的设想定名为 JavaScript.next 继续开发,后来演变成 ECMAScript 6;
      • 一些不是很成熟的设想,则被视为 JavaScript.next.next,在更远的将来再考虑推出。TC39 委员会的总体考虑是,ES5 与 ES3 基本保持兼容,较大的语法修正和新功能加入,将由 JavaScript.next 完成。
      • 当时,JavaScript.next 指的是 ES6,第六版发布以后,就指 ES7。
      • TC39 的判断是,ES5 会在 2013 年的年中成为 JavaScript 开发的主流标准,并在此后五年中一直保持这个位置
  • 2011.6
    • ECMAScript 5.1 版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011)
  • 2013.3
    • ECMAScript 6 草案冻结,不再添加新功能。新的功能设想将被放到 ECMAScript 7。
  • 2013 年 12 月
    • ECMAScript 6 草案发布。然后是 12 个月的讨论期,听取各方反馈。
  • 2015 年 6 月
    • ECMAScript 6 正式通过,成为国际标准。从 2000 年算起,这时已经过去了 15 年。

5.部署进度 § ⇧

  • 各大浏览器的最新版本,对 ES6 的支持可以查看kangax.github.io/compat-table/es6/。
  • Node对 ES6 的支持度更高
  • 除了那些默认打开的功能,还有一些语法功能已经实现了,但是默认没有打开

使用下面的命令查看 Node 已经实现的 ES6 特性:

// Linux & Mac
$ node --v8-options | grep harmony

// Windows
$ node --v8-options | findstr harmony

6.转码器

  • Babel 转码器
  • Traceur 转码器
    • Google 公司的Traceur转码器,也可以将 ES6 代码转为 ES5 代码