1.ECMAScript 6簡介

本文來自阮一峰-Flex 布局教程:實例篇校哎,僅供自己學(xué)習(xí)參考整理。

一腰奋、概念

1.ECMAScript和JavaScript的關(guān)系抱怔?

前者是后者的規(guī)格劣坊,后者是前者的一種實現(xiàn)(另外ECMAScript方言還有JScript和ActionScript)屈留,日常場合,這兩個詞是可以互換的康二。

2.ES6和ES2015

ES6 既是一個歷史名詞勇蝙,也是一個泛指,含義是 5.1 版以后的 JavaScript 的下一代標準浅蚪,涵蓋了 ES2015、ES2016惜傲、ES2017 等等,而 ES2015 則是正式名稱时甚,特指該年發(fā)布的正式版本的語言標準哈踱。本書中提到 ES6 的地方荒适,一般是指 ES2015 標準开镣,但有時也是泛指“下一代 JavaScript 語言”。

3.語法提案的批準流程

任何人都可以向標準委員會(TC39委員會)提案陕壹,要求修改語言標準树埠。
一種新的語言標準從提案到變成正式標準,需要經(jīng)歷5個階段怎憋。每個階段都需要由TC39委員會批準九昧。

  • Stage 0 —— 展示階段
  • Stage 1 —— 征求意見階段
  • Stage 2 —— 草案階段
  • Stage 3 —— 候選人階段
  • Stage 4 —— 定案階段
    一個提案只要能進入Stage2階段毕匀,就差不多肯定會包括在以后的正式標準里面。ECMAScript當(dāng)前所有的提案期揪,可以在TC39的官方網(wǎng)站查看。
    目前姓建,各大瀏覽器對 ES6 的支持可以查看kangax.github.io/compat-table/es6/缤苫。
    Node.js 是 JavaScript 的服務(wù)器運行環(huán)境(runtime)速兔。它對 ES6 的支持度更高活玲。除了那些默認打開的功能,還有一些語法功能已經(jīng)實現(xiàn)了镀钓,但是默認沒有打開镀迂。使用下面的命令,可以查看 Node.js 默認沒有打開的 ES6 實驗性語法探遵。
// Linux & Mac
$ node --v8-options | grep harmony

// Windows
$ node --v8-options | findstr harmony
4.Babel 轉(zhuǎn)碼器

Babel是一個廣泛使用的ES6轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼涯穷,從而在老版本的瀏覽器執(zhí)行。這意味著拷况,你可以用ES6的方式編寫程序诉稍,又不用擔(dān)心現(xiàn)有環(huán)境是否支持。下面例子:

// 轉(zhuǎn)碼前
input.map(item => item + 1);
// 轉(zhuǎn)碼后
input.map(function(item){
  return item + 1;
})

上面的原始代碼用了箭頭函數(shù)杯巨,Babel將其轉(zhuǎn)為普通函數(shù)努酸,就能在不支持箭頭函數(shù)的JavaScript環(huán)境執(zhí)行了。
下面的命令在項目目錄中,安裝Babel心褐。

$ npm install --save-dev @babel/core
4-1 配置文件.babelrc

Babel的配置文件時.babelrc笼踩,存放在項目的根目錄下。使用Babel的第一步嚎于,就是配置這個文件。
這個文件用來設(shè)置轉(zhuǎn)碼規(guī)則和插件袍睡,基本格式如下:

{
  "presets": [],
  "plugins": []
}

presets字段設(shè)定轉(zhuǎn)碼規(guī)則肋僧,官方提供以下的規(guī)則集斑胜,可以根據(jù)需要安裝嫌吠。

# 最新轉(zhuǎn)碼規(guī)則
$ npm install --save-dev @babel/preset-env

# react 轉(zhuǎn)碼規(guī)則
$ npm install --save-dev @babel/preset-react

然后將這些規(guī)則加入.babelrc

{
  "presets": [
    "@babel/env",
    "@babel/preset-react"
  ],
  "plugins": []
}

注意,以下所有Babel工具和模塊的使用凭戴,都必須先安裝好.babelrc泥栖。

4-2 命令行轉(zhuǎn)碼

Babel提供命令行工具@babel/cli,用于命令行轉(zhuǎn)碼吧享。
它的安裝命令如下:

$ npm install --save-dev @babel/cli

基本用法如下:

# 轉(zhuǎn)碼結(jié)果輸出到標準輸出
$ npx babel example.js

# 轉(zhuǎn)碼結(jié)果寫入一個文件
# --out-file 或 -o 參數(shù)指定輸出文件
$ npx babel example.js --out-file compiled.js
# 或者
$ npx babel example.js -o compiled.js

# 整個目錄轉(zhuǎn)碼
# --out-dir 或 -d 參數(shù)指定輸出目錄
$ npx babel src --out-dir lib
# 或者
$ npx babel src -d lib

# -s 參數(shù)生成source map文件
$ npx babel src -d lib -s
4-3 babel-node

@babel/node模塊的babel-node命令,提供一個支持的ES6的REPL環(huán)境钞它。他支持Node的REPL環(huán)境的所有功能操灿,而且可以直接運行ES6代碼。
首先趾盐,安裝這個模塊:

$ npm install --save-dev @babel/node

然后小腊,執(zhí)行babel-node就進入REPL環(huán)境久窟。

$ npx babel-node
> (x => x * 2)(1)
2

babel-node命令可以直接運行 ES6 腳本。將上面的代碼放入腳本文件es6.js入问,然后直接運行稀颁。

# es6.js 的代碼
# console.log((x => x * 2)(1));
$ npx babel-node es6.js
2
4-4 @babel/register 模塊

@babel/register模塊改寫require命令,為它加上一個鉤子峻村。此后,每當(dāng)使用require加載.js粘昨、.jsx、.es和.es6后綴名的文件芭析,就會先用 Babel 進行轉(zhuǎn)碼吞瞪。

$ npm install --save-dev @babel/register

使用時,必須首先加載@babel/register芍秆。

// index.js
require('@babel/register');
require('./es6.js');

然后,就不需要手動對index.js轉(zhuǎn)碼了霉颠。

$ node index.js
2

需要注意的是,@babel/register只會對require命令加載的文件轉(zhuǎn)碼蒿偎,而不會對當(dāng)前文件轉(zhuǎn)碼怀读。另外,由于它是實時轉(zhuǎn)碼菜枷,所以只適合在開發(fā)環(huán)境使用。

4-5 polyfill

Babel 默認只轉(zhuǎn)換新的 JavaScript 句法(syntax)椿息,而不轉(zhuǎn)換新的 API歹袁,比如Iterator寝优、Generator枫耳、Set、Map钻心、Proxy、Reflect捷沸、Symbol狐史、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assign)都不會轉(zhuǎn)碼骏全。
舉例來說,ES6 在Array對象上新增了Array.from方法试吁。Babel 就不會轉(zhuǎn)碼這個方法楼咳。如果想讓這個方法運行熄捍,可以使用core-js和regenerator-runtime(后者提供generator函數(shù)的轉(zhuǎn)碼)母怜,為當(dāng)前環(huán)境提供一個墊片。
安裝命令如下宾添。

$ npm install --save-dev core-js regenerator-runtime

然后柜裸,在腳本頭部,加入如下兩行代碼疙挺。

import 'core-js';
import 'regenerator-runtime/runtime';
// 或者
require('core-js');
require('regenerator-runtime/runtime');

Babel 默認不轉(zhuǎn)碼的 API 非常多,詳細清單可以查看babel-plugin-transform-runtime模塊的definitions.js文件蔬崩。

4-6 瀏覽器環(huán)境

Babel也可以用于瀏覽器環(huán)境,使用@babel/standalone提供的瀏覽器版本沥阳,將其插入網(wǎng)頁。

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
// Your ES6 code
</script>

注意脉让,網(wǎng)頁實時將 ES6 代碼轉(zhuǎn)為 ES5,對性能會有影響溅潜。生產(chǎn)環(huán)境需要加載已經(jīng)轉(zhuǎn)碼完成的腳本薪伏。

Babel 提供一個REPL 在線編譯器,可以在線將 ES6 代碼轉(zhuǎn)為 ES5 代碼嫁怀。轉(zhuǎn)換后的代碼,可以直接作為 ES5 代碼插入網(wǎng)頁運行挡育。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朴爬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子召噩,更是在濱河造成了極大的恐慌,老刑警劉巖凹嘲,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件构韵,死亡現(xiàn)場離奇詭異,居然都是意外死亡疲恢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門棚愤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宛畦,你說我怎么就攤上這事》蠢撸” “怎么了斯够?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長读规。 經(jīng)常有香客問我燃少,道長,這世上最難降的妖魔是什么碍遍? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任阳液,我火速辦了婚禮,結(jié)果婚禮上帘皿,老公的妹妹穿的比我還像新娘。我一直安慰自己鹰溜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布斋日。 她就那樣靜靜地躺著墓陈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兔港。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天押框,我揣著相機與錄音理逊,去河邊找鬼盒揉。 笑死兑徘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挂脑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼肋联,長吁一口氣:“原來是場噩夢啊……” “哼刁俭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牍戚,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宪哩,沒想到半個月后第晰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锁孟,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡罗岖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年腹躁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺非。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡烧颖,死狀恐怖弱左,靈堂內(nèi)的尸體忽然破棺而出炕淮,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布币叹,位于F島的核電站模狭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嚼鹉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一匹舞、第九天 我趴在偏房一處隱蔽的房頂上張望宴树。 院中可真熱鬧,春花似錦酒贬、人聲如沸翠霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至考蕾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肖卧,已是汗流浹背掸鹅。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巍沙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓榔幸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親削咆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容