diff --git a/docs/intro.md b/docs/intro.md index 35e12c1..d475111 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -38,19 +38,21 @@ ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负 由于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版,就可以体验这些特性。 +Google公司的V8引擎已经部署了ES6的部分特性。使用Node.js 0.12版,就可以体验这些特性。 -Node.js的0.11版还不是稳定版本,要使用版本管理工具[nvm](https://github.com/creationix/nvm)切换。下载nvm以后,进入项目目录,运行下面的命令。 +可以使用版本管理工具[nvm](https://github.com/creationix/nvm),安装Node.js 0.12版。下载nvm以后,进入项目目录,运行下面的命令。 ```bash $ source nvm.sh -$ nvm use 0.11 +$ nvm use 0.12 $ node --harmony ``` -启动命令中的`--harmony`选项可以打开所有已经部署的ES6功能。使用下面的命令,可以查看所有与ES6有关的单个选项。 +上面最后一个命令的`--harmony`选项,可以进入REPL环境,打开所有已经部署的ES6功能。 + +使用下面的命令,可以查看Node.js所有与ES6有关的单个选项。 ```bash @@ -73,9 +75,39 @@ $ node --v8-options | grep harmony ``` -## Traceur编译器 +从Node.js分立的[io.js](https://iojs.org)项目,对ES6的支持更彻底。不用打开任何参数,它就支持8项ES6特性。 -Google公司的[Traceur](https://github.com/google/traceur-compiler)编译器,可以将ES6代码编译为ES5代码。这意味着,你可以用ES6的方式编写程序,又不用担心浏览器是否支持。 +- 块级作用域:let,const +- 集合型数据类型:Map,Set,WeakMap,WeakSet +- Promise +- Iterator +- Generator +- 模板字符串 +- Symbol +- 二进制和八进制表示法,新的字符串方法 + +使用 --es_staging 参数或 --harmony 参数,打开另外两项ES6特性。 + +- Class +- 对象的简易表示法 + +还有一些开发没有结束的特性,需要使用特定的参数,逐一打开。使用下面的命令,查看这些参数。 + +```bash +$ iojs --v8-options | grep "in progress" +- --harmony_modules +- --harmony_arrays +- --harmony_array_includes +- --harmony_regexps +- --harmony_arrow_functions +- --harmony_proxies +- --harmony_sloppy +- --harmony_unicode +``` + +## Traceur转码器 + +Google公司的[Traceur](https://github.com/google/traceur-compiler)转码器,可以将ES6代码转为ES5代码。这意味着,你可以用ES6的方式编写程序,又不用担心浏览器是否支持。 它有多种使用方式。 @@ -144,7 +176,7 @@ Traceur提供一个[在线编译器](http://google.github.io/traceur-compiler/de + type="text/javascript"> @@ -239,6 +271,48 @@ fs.writeFileSync('out.js.map', result.sourceMap); ``` +## Babel转码器 + +[Babel](https://babeljs.io/)是另一个广泛使用的ES6转码器,安装命令如下。 + +```bash +$ npm install --global babel +``` + +Babel自带一个 `babel-node` 命令,与Node命令行完全一致,而且可以直接运行ES6代码。 + +```bash +$ babel-node +> +> console.log([1,2,3].map(x => x * x)) + [ 1, 4, 9 ] +> +``` + +`babel-node` 命令也可以直接运行ES6脚本。假定将上面的代码放入脚本文件 es6.js 。 + +```bash +$ babel-node es6.js +[1, 4, 9] +``` + +babel 命令可以将ES6代码转为ES5代码。 + +```bash +$ babel es6.js +"use strict"; + +console.log([1, 2, 3].map(function (x) { + return x * x; +})); +``` + +`-o` 参数将转换后的代码,从标准输出导入文件。 + +```bash +$ babel es6.js -o es5.js +``` + ## ECMAScript 7 2013年3月,ES6的草案封闭,不再接受新功能了。新的功能将被加入ES7。