你不懂JS:ES6與未來 第一章:ES接剩?現(xiàn)在與未來

官方中文版原文鏈接

感謝社區(qū)中各位的大力支持撬陵,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券珊皿,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大獎(jiǎng):點(diǎn)擊這里領(lǐng)取

在你一頭扎進(jìn)這本書之前巨税,你應(yīng)當(dāng)可以熟練地使用(在本書寫作時(shí))最近版本的JavaScript蟋定,也就是通常所說的 ES5(技術(shù)上講是ES 5.1)。這里草添,我們打算好好談?wù)劶磳⒌絹淼?ES6驶兜,同時(shí)放眼未來去看看JS將會(huì)如何繼續(xù)進(jìn)化。

如果你還在JavaScript上尋找信心,我強(qiáng)烈推薦你首先讀一讀本系列的其他書目:

  • 入門與進(jìn)階:你是編程和JS的新手嗎抄淑?這就是你在開啟學(xué)習(xí)的旅程前需要查看的路線圖犀盟。
  • 作用域與閉包:你知道JS的詞法作用域是基于編譯器(不是解釋器!)語義的嗎蝇狼?你能解釋閉包是如何成為詞法作用域和函數(shù)作為值的直接結(jié)果的嗎阅畴?
  • this與對(duì)象原型:你能復(fù)述this綁定的四個(gè)簡(jiǎn)單規(guī)則嗎?你有沒有曾經(jīng)在JS中對(duì)付著去山寨“類”迅耘,而不是采取更簡(jiǎn)單的“行為委托”設(shè)計(jì)模式贱枣?你聽說過 鏈接到其他對(duì)象的對(duì)象 (OOLO)嗎?
  • 類型與文法:你知道JS中的內(nèi)建類型嗎颤专?更重要的是纽哥,你知道如何在類型之間正確且安全地使用強(qiáng)制轉(zhuǎn)換嗎?你對(duì)JS文法/語法的微妙之處感到有多習(xí)慣栖秕?
  • 異步與性能:你還在使用回調(diào)管理你的異步處理嗎春塌?你能解釋promise是為什么/如何解決了“回調(diào)地獄”的嗎?你知道如何使用generator來改進(jìn)異步代碼的易讀性嗎簇捍?到底是什么構(gòu)成了JS程序和獨(dú)立操作的成熟優(yōu)化只壳?

如果你已經(jīng)讀過了這些書目而且對(duì)它們涵蓋的內(nèi)容感到十分輕松,那么現(xiàn)在是時(shí)候讓我們深入JS的進(jìn)化過程來探索所有即將到來的以及未來會(huì)發(fā)生的改變了暑塑。

與ES5不同吼句,ES6不僅僅是向語言添加的一組不算太多的新API。它包含大量的新的語法形式事格,其中的一些你可能會(huì)花上相當(dāng)一段時(shí)間才能適應(yīng)惕艳。還有幾種新的組織形式和為各種數(shù)據(jù)類型添加的新API。

對(duì)這門語言來說ES6十分激進(jìn)驹愚。就算你認(rèn)為你懂得ES5的JS远搪,ES6也滿是 你還不懂的 新東西,所以做好準(zhǔn)備逢捺!這本書探索所有你需要迅速掌握的ES6主要主題谁鳍,并且窺見一下那些你應(yīng)當(dāng)注意的正在步入正軌的未來特性。

警告: 這本書中的所有代碼都假定運(yùn)行在ES6+的環(huán)境中蒸甜。在寫作本書時(shí)棠耕,瀏覽器和JS環(huán)境(比如Node.js)對(duì)ES6的支持相當(dāng)不同,因此你的感覺可能將會(huì)不同柠新。

版本

JavaScript標(biāo)準(zhǔn)在官方上被稱為“ECMAScript”(縮寫為“ES”),而且直到最近才剛剛完全采用順序數(shù)字來標(biāo)記版本(例如辉巡,“5”代表“第五版”)恨憎。

最早的版本,ES1和ES2,并不廣為人知也沒有大范圍地被實(shí)現(xiàn)憔恳。ES3是JavaScript第一次廣泛傳播的基準(zhǔn)線瓤荔,并且構(gòu)成了像IE6-8和更早的Android 2.x移動(dòng)瀏覽器的JavaScript標(biāo)準(zhǔn)。由于一些超出我們討論范圍的政治原因钥组,命運(yùn)多舛的ES4從未問世输硝。

在2009年,ES5正式定稿(在2011年出現(xiàn)了ES5.1)程梦,它在瀏覽器的現(xiàn)代革新和爆發(fā)性增長(zhǎng)(比如Firefox点把,Chrome,Opera屿附,Safari郎逃,和其他許多)中廣泛傳播,并作為JS標(biāo)準(zhǔn)穩(wěn)定下來挺份。

預(yù)計(jì)下一個(gè)版本的JS(從2013年到2014年和之后的2015年中的內(nèi)容)褒翰,在人們的討論中顯然地經(jīng)常被稱為ES6。

然而匀泊,在ES6規(guī)范的晚些時(shí)候优训,有建議提及未來的版本號(hào)也許會(huì)切換到編年制,比如用ES2016(也叫ES7)來指代在2016年末之前被定稿的任何版本各聘。有些人對(duì)此持否定意見型宙,但是相對(duì)于后來的ES2015來說,ES6將很可能繼續(xù)維持它占統(tǒng)治地位的影響力伦吠∽倍遥可是,ES2016事實(shí)上可能標(biāo)志了新的編年制毛仪。

還可以看到搁嗓,JS進(jìn)化的頻度即使與一年一度的定版相比都要快得多。只要一個(gè)想法開始標(biāo)準(zhǔn)化討論的進(jìn)程箱靴,瀏覽器就開始為這種特性建造原型腺逛,而且早期的采用者就開始在代碼中進(jìn)行實(shí)驗(yàn)。

通常在一個(gè)特性被蓋上官方承認(rèn)的印章以前衡怀,由于這些早期的引擎/工具的原型它實(shí)際上已經(jīng)被標(biāo)準(zhǔn)化了棍矛。所以也可以認(rèn)為未來的JS版本將是一個(gè)特性一個(gè)特性的更新,而非一組主要特性的隨意集合的更新(就像現(xiàn)在)抛杨,也不是一年一年的更新(就像可能將變成的那樣)够委。

簡(jiǎn)而言之,版本號(hào)不再那么重要了怖现,JavaScript開始變得更像一個(gè)常青的茁帽,活的標(biāo)準(zhǔn)玉罐。應(yīng)對(duì)它的最佳方法是,舉例來說潘拨,不再將你的代碼庫認(rèn)為是“基于ES6”的吊输,而是考慮它支持的一個(gè)個(gè)特性。

轉(zhuǎn)譯

由于特性的快速進(jìn)化铁追,給開發(fā)者們?cè)斐闪艘粋€(gè)糟糕的問題季蚂,他們強(qiáng)烈地渴望立即使用新特性,而同時(shí)被被現(xiàn)實(shí)打臉 —— 他們的網(wǎng)站/app需要支持那些不支持這些特性的老版本瀏覽器琅束。

在整個(gè)行業(yè)中ES5的方式似乎已經(jīng)無力回天了扭屁,它典型的思維模式是,代碼庫等待幾乎所有的前ES5環(huán)境從它們的支持譜系中除名之后才開始采用ES5狰闪。結(jié)果呢疯搅,許多人最近(在本書寫作時(shí))才開始采用strict模式這樣的東西,而它早在五年前就在ES5中定稿了埋泵。

對(duì)于JS生態(tài)系統(tǒng)的未來來說幔欧,等待和落后于語言規(guī)范那么多年被廣泛地認(rèn)為是一種有害的方式。所有負(fù)責(zé)推動(dòng)語言演進(jìn)的人都渴望這樣的事情丽声;只要新的特性和模式以規(guī)范的形式穩(wěn)定下來礁蔗,并且瀏覽器有機(jī)會(huì)實(shí)現(xiàn)它們,開發(fā)者就開始基于這些新的特性和模式進(jìn)行編碼雁社。

那么我們?nèi)绾谓鉀Q這個(gè)看起來似乎矛盾的問題浴井?答案是工具,特別是一種稱為 轉(zhuǎn)譯(transpiling) 的技術(shù)(轉(zhuǎn)換+編譯)霉撵。大致上磺浙,它的想法是使用一種特殊的工具將你的ES6代碼轉(zhuǎn)換為可以在ES5環(huán)境中工作的等價(jià)物(或近似物!)徒坡。

例如撕氧,考慮屬性定義縮寫(見第二章的“對(duì)象字面擴(kuò)展”)。這是ES6的形式:

var foo = [1,2,3];

var obj = {
    foo     // 意思是 `foo: foo`
};

obj.foo;    // [1,2,3]

這(大致)是它如何被轉(zhuǎn)譯:

var foo = [1,2,3];

var obj = {
    foo: foo
};

obj.foo;    // [1,2,3]

這是一個(gè)微小但令人高興的轉(zhuǎn)換喇完,它讓我們?cè)谝粋€(gè)對(duì)象字面聲明中將foo: foo縮寫為foo伦泥,如果名稱相同的話。

轉(zhuǎn)譯器為你實(shí)施這些變形锦溪,這個(gè)過程通常是構(gòu)建工作流的一個(gè)步驟 —— 與你進(jìn)行l(wèi)inting不脯,壓縮,和其他類似操作相似刻诊。

填補(bǔ)(Shims/Polyfills)

不是所有的ES6新特性都需要轉(zhuǎn)譯器防楷。填補(bǔ)(也叫shims)是一種模式,在可能的情況下坏逢,它為一個(gè)新環(huán)境的行為定義一個(gè)可以在舊環(huán)境中運(yùn)行的等價(jià)行為域帐。語法是不能填補(bǔ)的赘被,但是API經(jīng)常是可以的是整。

例如肖揣,Object.is(..)是一個(gè)用來檢查兩個(gè)值嚴(yán)格等價(jià)性的新工具,它不帶有===對(duì)于NaN-0值的那種微妙的例外浮入。Object.is(..)的填補(bǔ)相當(dāng)簡(jiǎn)單:

if (!Object.is) {
    Object.is = function(v1, v2) {
        // 測(cè)試 `-0`
        if (v1 === 0 && v2 === 0) {
            return 1 / v1 === 1 / v2;
        }
        // 測(cè)試 `NaN`
        if (v1 !== v1) {
            return v2 !== v2;
        }
        // 其他的一切情況
        return v1 === v2;
    };
}

提示:注意外部的if語句守護(hù)性地包圍著填補(bǔ)的內(nèi)容龙优。這是一個(gè)重要的細(xì)節(jié),它意味著這個(gè)代碼段僅僅是為這個(gè)API還未定義的老環(huán)境而定義的后備行為事秀;你想要覆蓋既存API的情況是非常少見的彤断。

有一個(gè)被稱為“ES6 Shim”(https://github.com/paulmillr/es6-shim/)的了不起的ES6填補(bǔ)集合,你絕對(duì)應(yīng)該將它采納為任何新JS項(xiàng)目的標(biāo)準(zhǔn)組成部分易迹!

看起來JS將會(huì)繼續(xù)一往無前的進(jìn)化下去宰衙,同時(shí)瀏覽器也會(huì)持續(xù)地小步迭代以支持新特性,而不是大塊大塊地更新睹欲。所以跟上時(shí)代的最佳策略就是在你的代碼庫中引入填補(bǔ)供炼,并在你的構(gòu)建流程中引入一個(gè)轉(zhuǎn)譯器步驟,現(xiàn)在就開始習(xí)慣新的現(xiàn)實(shí)窘疮。

如果你決定維持現(xiàn)狀袋哼,等待不支持新特性的所有瀏覽器都消失才開始使用新特性,那么你將總是落后于時(shí)代闸衫。你將可悲地錯(cuò)過所有新發(fā)明的設(shè)計(jì) —— 而它們使編寫JavaScript更有效涛贯,更高效,而且更健壯蔚出。

復(fù)習(xí)

ES6(有些人可能會(huì)稱它為ES2015)在本書寫作時(shí)剛剛定稿弟翘,它包含許多你需要學(xué)習(xí)的新東西!

但更重要的是骄酗,它將你的思維模式與JavaScript新的進(jìn)化方式相接軌稀余。不是僅僅為了等待某些官方文檔投票通過而耗上許多年,就像以前許多人做的那樣酥筝。

現(xiàn)在滚躯,JavaScript特性一準(zhǔn)備好就會(huì)在瀏覽器中實(shí)現(xiàn),由你來決定是否現(xiàn)在就搭上早班車嘿歌,還是去玩兒代價(jià)不菲的追車游戲掸掏。

不管未來的JavaScript采用什么樣的標(biāo)簽,它都將會(huì)以比以前快得多的速度前進(jìn)宙帝。為了使你位于在這門語言前進(jìn)方向上的最前列丧凤,轉(zhuǎn)譯和填補(bǔ)是不可或缺的工具。

如果說對(duì)于JavaScript的新現(xiàn)實(shí)有什么重要的事情需要理解步脓,那就是所有的JS開發(fā)者都被強(qiáng)烈地懇求從落后的一端移動(dòng)到領(lǐng)先的一段愿待。而學(xué)習(xí)ES6就是這一切的開端浩螺!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仍侥,隨后出現(xiàn)的幾起案子要出,更是在濱河造成了極大的恐慌,老刑警劉巖农渊,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件患蹂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砸紊,警方通過查閱死者的電腦和手機(jī)传于,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醉顽,“玉大人沼溜,你說我怎么就攤上這事∮翁恚” “怎么了系草?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)否淤。 經(jīng)常有香客問我悄但,道長(zhǎng),這世上最難降的妖魔是什么石抡? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任檐嚣,我火速辦了婚禮,結(jié)果婚禮上啰扛,老公的妹妹穿的比我還像新娘嚎京。我一直安慰自己,他們只是感情好隐解,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布鞍帝。 她就那樣靜靜地躺著,像睡著了一般煞茫。 火紅的嫁衣襯著肌膚如雪帕涌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天续徽,我揣著相機(jī)與錄音蚓曼,去河邊找鬼。 笑死钦扭,一個(gè)胖子當(dāng)著我的面吹牛纫版,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播客情,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼其弊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼癞己!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梭伐,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤痹雅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后籽御,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體练慕,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惰匙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年技掏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项鬼。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哑梳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绘盟,到底是詐尸還是另有隱情鸠真,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布龄毡,位于F島的核電站吠卷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沦零。R本人自食惡果不足惜祭隔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望路操。 院中可真熱鬧疾渴,春花似錦、人聲如沸屯仗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魁袜。三九已至桩撮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峰弹,已是汗流浹背店量。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垮卓,地道東北人垫桂。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粟按,于是被迫代替她去往敵國(guó)和親诬滩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霹粥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 特別說明后控,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 157評(píng)論 0 0
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持空镜,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券浩淘,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 6,554評(píng)論 3 22
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持吴攒,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券张抄,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,981評(píng)論 12 65
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持洼怔,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券署惯,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,658評(píng)論 2 27
  • 我時(shí)常問自己镣隶,為什么我的煩惱比快樂多极谊。如果我們來做個(gè)分析,首先說明一下我是個(gè)90后安岂,記得童年的時(shí)候過的很快樂轻猖。我有...
    釋駒閱讀 311評(píng)論 0 0