1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00
es6tutorial/docs/intro.md
2014-05-03 19:20:43 +08:00

146 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ECMAScript 6简介
ECMAScript 6以下简称ES6是JavaScript语言的下一代标准正处在快速开发之中大部分已经完成了预计将在2014年底正式发布。Mozilla将在这个标准的基础上推出JavaScript 2.0。
ES6的目标是使得JavaScript语言可以用来编写大型的复杂的应用程序成为企业级开发语言。
## ECMAScript和JavaScript的关系
ECMAScript是JavaScript语言的国际标准JavaScript是ECMAScript的实现。
1996年11月JavaScript的创造者Netscape公司决定将JavaScript提交给国际标准化组织ECMA希望这种语言能够成为国际标准。次年ECMA发布262号标准文件ECMA-262的第一版规定了浏览器脚本语言的标准并将这种语言称为ECMAScript。这个版本就是ECMAScript 1.0版。
之所以不叫JavaScript有两个原因。一是商标Java是Sun公司的商标根据授权协议只有Netscape公司可以合法地使用JavaScript这个名字且JavaScript本身也已经被Netscape公司注册为商标。二是想体现这门语言的制定者是ECMA不是Netscape这样有利于保证这门语言的开放性和中立性。因此ECMAScript和JavaScript的关系是前者是后者的规格后者是前者的一种实现。在日常场合这两个词是可以互换的。
## ECMAScript的历史
1998年6月ECMAScript 2.0版发布。
1999年12月ECMAScript 3.0版发布成为JavaScript的通行标准得到了广泛支持。
2008年7月由于对于下一个版本应该包括哪些功能各方差异太大争论过于激进ECMA开会决定中止ECMAScript 4.0的开发将其中涉及现有功能改善的一小部分发布为ECMAScript 3.1而将其他激进的设想扩大范围放入以后的版本由于会议的气氛该版本的项目代号起名为Harmony和谐。会后不久ECMAScript 3.1就改名为ECMAScript 5。
2009年9月ECMAScript 5.0版正式发布。Harmony项目则一分为二一些较为可行的设想定名为Javascript.next继续开发后来演变成ECMAScript 6一些不是很成熟的设想则被视为JavaScript.next.next在更远的将来再考虑推出。
2011年6月ECMAscript 5.1版发布并且成为ISO国际标准ISO/IEC 16262:2011
2013年3月ECMAScript 6草案冻结不再添加新功能。新的功能设想将被放到ECMAScript 7。
2013年12月ECMAScript 6草案发布。然后是12个月的讨论期听取各方反馈。
2014年12月ECMAScript 6预计将发布正式版本。
ECMA的第39号技术专家委员会Technical Committee 39简称TC39负责制订ECMAScript标准成员包括Microsoft、Mozilla、Google等大公司。TC39的总体考虑是ES5与ES3基本保持兼容较大的语法修正和新功能加入将由JavaScript.next完成。当前JavaScript.next指的是ES6当第六版发布以后将指ES7。TC39估计ES5会在2013年的年中成为JavaScript开发的主流标准并在今后五年中一直保持这个位置。
## 部署进度
由于ES6还没有定案有些语法规则还会变动目前支持ES6的软件和开发环境还不多。各大浏览器的最新版本对ES6的支持可以查看[kangax.github.io/es5-compat-table/es6/](http://kangax.github.io/es5-compat-table/es6/)。
Google公司的V8引擎已经部署了ES6的部分特性。使用node.js 0.11版,就可以体验这些特性。
node.js的0.11版还不是稳定版本,要使用版本管理工具[nvm](https://github.com/creationix/nvm)切换。下载nvm以后进入项目目录运行下面的命令。
```bash
source nvm.sh
nvm use 0.11
node --harmony
```
启动命令中的`--harmony`选项可以打开所有已经部署的ES6功能。使用下面的命令可以查看所有与ES6有关的单个选项。
```bash
$ node --v8-options | grep harmony
--harmony_typeof
--harmony_scoping
--harmony_modules
--harmony_symbols
--harmony_proxies
--harmony_collections
--harmony_observation
--harmony_generators
--harmony_iteration
--harmony_numeric_literals
--harmony_strings
--harmony_arrays
--harmony_maths
--harmony
```
## Traceur编译器
Google公司的[Traceur](https://github.com/google/traceur-compiler)编译器可以将ES6代码编译为ES5代码。
Traceur是一个node.js的模块需要用npm安装。
```bash
npm install -g traceur
```
它有多种使用方法,首先是命令行工具。
```bash
# 运行ES6文件在标准输出显示结果
traceur /path/to/es6
# 将ES6文件转为ES5文件
traceur --script /path/to/es6 --out /path/to/es5
```
命令行下转换的文件就可以放到浏览器中运行。假定转换后的文件是result.js它插入浏览器的写法如下。
```html
<script src="bin/traceur-runtime.js"></script>
<script src="out/result.js"></script>
```
上面代码中的traceur-runtime.js是traceur提供的浏览器函数库。
Traceur的node.js用法如下。
```javascript
var traceur = require('traceur');
var fs = require('fs');
var contents = fs.readFileSync('es6-file.js').toString();
var result = traceur.compile(contents, {
filename: 'es6-file.js',
sourceMap: true,
// 其他设置
modules: 'commonjs'
});
if (result.error)
throw result.error;
fs.writeFileSync('out.js', result.js);
fs.writeFileSync('out.js.map', result.sourceMap);
```
除了命令行工具Traceur还提供一个[浏览器界面](http://google.github.io/traceur-compiler/demo/repl.html)用于在线转换ES6代码。
## ECMAScript 7
2013年3月ES6的草案封闭不再接受新功能了。新的功能将被加入ES7。
ES7可能包括的功能有
1**Object.observe**:对象与网页元素的双向绑定,只要其中之一发生变化,就会自动反映在另一者上。
2**Multi-Threading**多线程支持。目前Intel和Mozilla有一个共同的研究项目RiverTrail致力于让JavaScript多线程运行。预计这个项目的研究成果会被纳入ECMAScript标准。
3**Traits**它将是“类”功能class的一个替代。通过它不同的对象可以分享同样的特性。
其他可能包括的功能还有更精确的数值计算、改善的内存回收、增强的跨站点安全、类型化的更贴近硬件的低级别操作、国际化支持Internationalization Support、更多的数据结构等等。