成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

你不知道的JavaScript(ES6與之未來(lái))

Julylovin / 1301人閱讀

摘要:然而,臨近規(guī)范發(fā)布時(shí),有建議提及未來(lái)的版本號(hào)切換為編年制,比如用同來(lái)指代在年末前被定稿的所有版本??偟脕?lái)說(shuō)就是版本號(hào)不再那么重要了,開(kāi)始變得更像一個(gè)萬(wàn)古長(zhǎng)青的活標(biāo)準(zhǔn)。

你不知道的JS(下卷)ES6與之未來(lái) 第一章:ES的今與明

在你想深入這本書(shū)之前,你應(yīng)該對(duì)(在讀此書(shū)時(shí))JavaScript的最近標(biāo)準(zhǔn)掌握熟練,也就是ES5(專業(yè)來(lái)說(shuō)是ES 5.1)。在此,我們決定全方面地談?wù)撽P(guān)于將近的 ES6,同時(shí)預(yù)見(jiàn)JS將會(huì)怎樣發(fā)展。

如果你對(duì)JavaScript不夠自信,我極力推薦你先讀一讀本系列的其他話題:

入門(mén)與進(jìn)階:你是編程和JS的菜鳥(niǎo)嗎?這部分是在你開(kāi)始學(xué)習(xí)征途是需要的線路圖。

作用域與閉包:你知道JS的詞法作用域是基于編譯器(不是解釋器)語(yǔ)義的嗎?你能解釋閉包是如何成為詞法作用域和函數(shù)作為值的直接結(jié)果的嗎?

this與對(duì)象原型:你能列舉this綁定的四個(gè)簡(jiǎn)單原則嗎?你可曾在JS中用偽造“類”,而不是采取更簡(jiǎn)單的“行為委托”設(shè)計(jì)模式?你聽(tīng)過(guò) 鏈接到其他對(duì)象的對(duì)象(結(jié)鏈對(duì)象 (OOLO)嗎?

類型與語(yǔ)法:你了解過(guò)JS中的內(nèi)置類型嗎?更關(guān)鍵是,你知道如何在類型之間正確且不出錯(cuò)地使用強(qiáng)制轉(zhuǎn)換嗎?你還對(duì)JS語(yǔ)法/句法的毫厘之差感到心安嗎?

異步與性能:你還在使用回調(diào)函數(shù)處理你的異步性?你能說(shuō)明promise是什么并且為何/如何解決了“回調(diào)地獄”的嗎?你知道如何使用generator來(lái)提升異步代碼的易讀性嗎?到底是什么構(gòu)成了成熟優(yōu)異的JS程序和獨(dú)立操作?

如果你已經(jīng)讀過(guò)了這些話題并且對(duì)它們涵蓋的內(nèi)容了然于胸,那此刻就讓我們深入JS的進(jìn)化過(guò)程來(lái)探索已初露端倪和更遠(yuǎn)的變化。

與ES5不同,ES6不僅僅往JavaScript這門(mén)語(yǔ)言添加一套新API。它包含了大量的新的語(yǔ)法形式,其中的一些你可能會(huì)花上點(diǎn)時(shí)間才能適應(yīng)。還有幾種新的組織形式以及為各種數(shù)據(jù)類型添加的新API helper方法。

對(duì)這門(mén)語(yǔ)言來(lái)說(shuō)ES6十分激進(jìn)。就算你自以為懂得ES5,ES6也滿是 你還未知曉 新東西,那就準(zhǔn)備好!這本書(shū)囊括了ES6中你需要立即掌握的重要主題,更有甚者是能預(yù)見(jiàn)你應(yīng)該能意識(shí)到未來(lái)方向。

警告: 本書(shū)中的所有代碼都模擬在ES6及以上的環(huán)境中運(yùn)行。這次編寫(xiě),不同的瀏覽器和JS環(huán)境(比如Node.js)對(duì)ES6的支持可能不同,由此你經(jīng)歷可能會(huì)豐富多樣。

版本

JavaScript標(biāo)準(zhǔn)官方名為“ECMAScript”(縮寫(xiě)為“ES”),并且直到最近才完全采用序列數(shù)來(lái)表示版本(例如,“5”代表“第五版”)。

最早的版本,ES1和ES2,并不廣為人知曉和使用。ES3是JavaScript第一次廣泛傳播的開(kāi)端,并且構(gòu)成了像IE6-8和早前的Android 2.x移動(dòng)瀏覽器的JavaScript標(biāo)準(zhǔn)。由于一些超出我們討論范圍的政治原因,不幸的的ES4沒(méi)有出現(xiàn)。

在2009年,ES5正式定稿(之后是2011年的ES5.1),它在瀏覽器的現(xiàn)代革命和爆發(fā)性增長(zhǎng)(比如Firefox,Chrome,Opera,Safari,和其他許多瀏覽器)中廣泛傳播,并作為JS標(biāo)準(zhǔn)確定下來(lái)。

展望下一個(gè)版本的JS(從2013年過(guò)渡到2014年和之后的2015年),在討論中顯而易見(jiàn)的是ES6。

然而,臨近ES6規(guī)范發(fā)布時(shí),有建議提及未來(lái)的版本號(hào)切換為編年制,比如用ES2016(同ES7)來(lái)指代在2016年末前被定稿的所有版本。有些人對(duì)此否定,相對(duì)于后來(lái)的ES2015來(lái)說(shuō),ES6更可能繼續(xù)保持優(yōu)勢(shì)。然而,事實(shí)上ES2016可能預(yù)兆了新的編年制(將被使用)。

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

通常在一個(gè)特性被官方承認(rèn)之前,這些早期的引擎/工具的原型已經(jīng)被標(biāo)準(zhǔn)化了。由此也可以認(rèn)為未來(lái)的JS版本將是一個(gè)特性一個(gè)特性的更新,而非一組主要特性的隨意集合的更新(就像現(xiàn)在這樣),也不是每年更新(像可能將變成的那樣)。

總得來(lái)說(shuō)就是版本號(hào)不再那么重要了,JavaScript開(kāi)始變得更像一個(gè)萬(wàn)古長(zhǎng)青的活標(biāo)準(zhǔn)。對(duì)待它的最佳方法是不再“基于ES6”來(lái)思考你的代碼,而是按它支持的特性考慮。

轉(zhuǎn)譯

特性的快速演變,給開(kāi)發(fā)者們促使一個(gè)本來(lái)存在的問(wèn)題惡化,他們熱衷于立即使用新特性,而同時(shí)被被現(xiàn)實(shí)打臉,他們的網(wǎng)站/app需要支持那些不支持這些特性的老版本瀏覽器。

在整個(gè)行業(yè)中ES5的方式似乎已經(jīng)無(wú)力回天了,它典型的思維模式是,代碼庫(kù)會(huì)等至幾乎所有的前ES5環(huán)境不能支持它們之后才開(kāi)始采用ES5。其結(jié)果,就是許多人最近(在本書(shū)寫(xiě)作時(shí))才開(kāi)始采用strict模式這樣的東西,而它早在五年前就在ES5中定稿了。

業(yè)界普遍認(rèn)為,等待和落后于語(yǔ)言規(guī)范那么多年,對(duì)JS生態(tài)系統(tǒng)是有害的。所有負(fù)責(zé)推動(dòng)語(yǔ)言進(jìn)化的人都期待這樣的事情;只要新的特性和模式以規(guī)范的形式穩(wěn)定下來(lái),并且瀏覽器有機(jī)會(huì)實(shí)現(xiàn)它們,開(kāi)發(fā)者就開(kāi)始基于這些新的特性和模式進(jìn)行編碼。

那么我們?nèi)绾谓鉀Q這個(gè)看似矛盾的問(wèn)題呢?答案是工具化,特別是一種稱為 轉(zhuǎn)譯(transpiling) 的技術(shù)(轉(zhuǎn)換+編譯)。大致上,它的理念是使用一種特殊的工具將你的ES6代碼轉(zhuǎn)換為可以在ES5環(huán)境中運(yùn)行的等價(jià)物(甚至更近似的?。?。

舉個(gè)栗子TvT,想一想簡(jiǎn)寫(xiě)屬性定義(見(jiàn)第二章的“對(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)換,(因?yàn)椋┧屛覀冊(cè)谝粋€(gè)對(duì)象字面量聲明中將foo: foo簡(jiǎn)寫(xiě)為foo,如果名稱(屬性名和屬性值)相同的話。

轉(zhuǎn)譯器為你執(zhí)行這些轉(zhuǎn)換,這個(gè)過(guò)程通常是構(gòu)建工作流的一個(gè)步驟,這和你使用linting(檢查代碼),壓縮等其他類似操作如出一轍。

Shim庫(kù)/Polyfill庫(kù)

不是所有的ES6新特性都需要轉(zhuǎn)譯器??尚械脑?,Polyfill(也叫shims)是一種模板,它為從一個(gè)新點(diǎn)的環(huán)境到舊點(diǎn)的環(huán)境中定義等效行為。語(yǔ)法不能被填補(bǔ),但是API往往可以。

比方說(shuō),Object.is(..)是一個(gè)用來(lái)檢查兩個(gè)值嚴(yán)格等價(jià)性的新功能,它不包括===對(duì)于NaN-0值的那種微小差異的例外。為Object.is(..)使用Polyfill相當(dāng)簡(jiǎn)單:

if (!Object.is) {
    Object.is = function(v1, v2) {
        // 檢查 `-0`
        if (v1 === 0 && v2 === 0) {
            return 1 / v1 === 1 / v2;
        }
        // 檢查 `NaN`
        if (v1 !== v1) {
            return v2 !== v2;
        }
        // 其他的所有情況
        return v1 === v2;
    };
}

提示:注意外層的if語(yǔ)句包圍了填補(bǔ)(polyfill)的內(nèi)容。這是一個(gè)重要的細(xì)節(jié),它意味著這段代碼段僅僅為了在考慮中的API還未被定義的老環(huán)境而定義的應(yīng)變行為;你想要重寫(xiě)API的情況少之又少。

這有一個(gè)被稱為“ES6 Shim”(https://github.com/paulmillr/...)的很棒的ES6填補(bǔ)(ES6 shim庫(kù))合集,你絕對(duì)會(huì)在所有新JS項(xiàng)目中把它作為標(biāo)準(zhǔn)組成部分來(lái)采用!

看起來(lái)JS將會(huì)維持持續(xù)發(fā)展(狀態(tài)),同時(shí)瀏覽器也會(huì)持續(xù)地推出來(lái)支持新特性,而不是洪水般地更新。所以現(xiàn)代化的最佳策略就是在你的代碼庫(kù)中引入填補(bǔ)(polyfill庫(kù)),并在你的構(gòu)建流程中引入轉(zhuǎn)譯步驟,現(xiàn)在就開(kāi)始習(xí)慣新的現(xiàn)實(shí)。

如果你決定保持現(xiàn)狀,等到所有不支持新特性的瀏覽器都消失才開(kāi)始使用新特性,那么你將一直落后于時(shí)代。你將遺憾地錯(cuò)過(guò)為使編寫(xiě)JavaScript更有效,更高效,而且更健壯而設(shè)計(jì)的改革。

溫故

ES6(有人可能會(huì)稱之為ES2015)在本書(shū)寫(xiě)作時(shí)剛剛落地,它包含許多你需要學(xué)習(xí)的新東西!

但更重要的是,它將使你的思維模式與JavaScript新的進(jìn)化方式一致。不再像以前許多人做的那樣為了某些官方文檔投票通過(guò)而苦等許多年。

現(xiàn)在,JavaScript新特性一旦準(zhǔn)備好就會(huì)登陸瀏覽器,由你來(lái)決定是否現(xiàn)在就搭上早班車,還是年年去玩兒代價(jià)不菲的追車游戲。

無(wú)論未來(lái)的JavaScript采用什么樣的標(biāo)記,它都將會(huì)以比以前更快的速度前進(jìn)。為使你保持在這門(mén)語(yǔ)言前進(jìn)方向上的最前列,轉(zhuǎn)譯和填補(bǔ)是關(guān)鍵的工具。

如果任何關(guān)于理解JavaScript新現(xiàn)狀有重要的敘述,那便讓所有的JS開(kāi)發(fā)者都熱誠(chéng)于從尾部移動(dòng)到領(lǐng)頭的部分。而學(xué)習(xí)ES6就是這一切的起源!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83094.html

相關(guān)文章

  • 【讀書(shū)筆記】你不知道JavaScript--內(nèi)置類型

    摘要:有種內(nèi)置類型,分別是除對(duì)象之外,其他統(tǒng)稱為基本類型。另一個(gè)需要注意的是數(shù)組確切地說(shuō),數(shù)組也是的一個(gè)子類型我們可以通過(guò)下面的方法檢查變量是不是數(shù)組處理未聲明的變量時(shí),會(huì)返回這是因?yàn)橛幸粋€(gè)特殊的安全防范機(jī)制。 js有7種內(nèi)置類型,分別是undefined null boolean string number symbol object除對(duì)象之 Object 外,其他統(tǒng)稱為基本類型。符號(hào) ...

    Integ 評(píng)論0 收藏0
  • 精讀《你不知道javascript(中卷)》

    摘要:強(qiáng)制類型轉(zhuǎn)換本章介紹了的數(shù)據(jù)類型之間的轉(zhuǎn)換即強(qiáng)制類型轉(zhuǎn)換包括顯式和隱式。強(qiáng)制類型轉(zhuǎn)換常常為人詬病但實(shí)際上很多時(shí)候它們是非常有用的。隱式強(qiáng)制類型轉(zhuǎn)換則沒(méi)有那么明顯是其他操作的副作用。在處理強(qiáng)制類型轉(zhuǎn)換的時(shí)候要十分小心尤其是隱式強(qiáng)制類型轉(zhuǎn)換。 前言 《你不知道的 javascript》是一個(gè)前端學(xué)習(xí)必讀的系列,讓不求甚解的JavaScript開(kāi)發(fā)者迎難而上,深入語(yǔ)言內(nèi)部,弄清楚JavaSc...

    李世贊 評(píng)論0 收藏0
  • [你不知道 JavaScript 類型和語(yǔ)法] 第一章:類型

    摘要:語(yǔ)言中規(guī)定的類型為以及。這兩個(gè)值有不同的類型。內(nèi)建類型定義了七種內(nèi)建類型中新增提示以上類型,除的被稱為基本類型。新增列出的六種類型的值都會(huì)返回一個(gè)對(duì)應(yīng)類型名稱的字符串。是中新增的數(shù)據(jù)類型,我們會(huì)在第三章詳細(xì)介紹。 譯者的前言 一直都想好好研究這個(gè)在 GitHub 上很有名氣的系列,而翻譯恰是最好的閱讀途徑之一??梢宰屛议喿x的時(shí)候,不那么不求甚解。 圖靈社區(qū)出版了該系列兩部分的中文版——...

    Astrian 評(píng)論0 收藏0
  • You-Dont-Need : 你不需要系列

    摘要:是強(qiáng)大的,你可以做很多事情沒(méi)有。如果你想要你的項(xiàng)目需要更少的依賴,并且你清楚的知道你的目標(biāo)瀏覽器,那么你可能不需要。我們并不需要為了操作等再學(xué)習(xí)一下的。但是,他們往往需要更多的資源,功能不強(qiáng),難以通過(guò)腳本自動(dòng)化。 1 You-Dont-Need-JavaScript CSS是強(qiáng)大的,你可以做很多事情沒(méi)有JS。 本文教你使用原生CSS做下面的事情。 內(nèi)容目錄 手風(fēng)琴/切換 圓盤(pán)傳送帶...

    anonymoussf 評(píng)論0 收藏0
  • You-Dont-Need : 你不需要系列

    摘要:是強(qiáng)大的,你可以做很多事情沒(méi)有。如果你想要你的項(xiàng)目需要更少的依賴,并且你清楚的知道你的目標(biāo)瀏覽器,那么你可能不需要。我們并不需要為了操作等再學(xué)習(xí)一下的。但是,他們往往需要更多的資源,功能不強(qiáng),難以通過(guò)腳本自動(dòng)化。 1 You-Dont-Need-JavaScript CSS是強(qiáng)大的,你可以做很多事情沒(méi)有JS。 本文教你使用原生CSS做下面的事情。 內(nèi)容目錄 手風(fēng)琴/切換 圓盤(pán)傳送帶...

    bawn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<