ES6的一些新知識(shí)點(diǎn)

簡(jiǎn)介

  • ECMAScript 6.0(以下簡(jiǎn)稱(chēng) ES6)是 JavaScript 語(yǔ)言的下一代標(biāo)準(zhǔn)代赁,已經(jīng)在2015年6月正式發(fā)布了。它的目標(biāo)只盹,是使得 JavaScript 語(yǔ)言可以用來(lái)編寫(xiě)復(fù)雜的大型應(yīng)用程序闯第,成為企業(yè)級(jí)開(kāi)發(fā)語(yǔ)言。
  • ES6 既是一個(gè)歷史名詞鲫骗,也是一個(gè)泛指,含義是5.1版以后的 JavaScript 的下一代標(biāo)準(zhǔn)踩晶,涵蓋了ES2015执泰、ES2016、ES2017等等渡蜻,而ES2015 則是正式名稱(chēng)术吝,特指該年發(fā)布的正式版本的語(yǔ)言標(biāo)準(zhǔn)。

let命令

  • ES6新增了let命令茸苇,用來(lái)聲明變量排苍。它的用法類(lèi)似于var,但是所聲明的變量学密,只在let命令所在的代碼塊內(nèi)有效淘衙。
  • 使用let時(shí)for循環(huán)還有一個(gè)特別之處,就是循環(huán)語(yǔ)句部分是一個(gè)父作用域则果,而循環(huán)體內(nèi)部是一個(gè)單獨(dú)的子作用域幔翰。
  • 不存在變量提升漩氨。
  • 暫時(shí)性死去:(只要塊級(jí)作用域內(nèi)存在let命令西壮,它所聲明的變量就“綁定”(binding)這個(gè)區(qū)域,不再受外部的影響)在代碼塊內(nèi)叫惊,使用let命令聲明變量之前款青,該變量都是不可用的。這在語(yǔ)法上霍狰,稱(chēng)為“暫時(shí)性死區(qū)”抡草。
  • ES6明確規(guī)定饰及,如果區(qū)塊中存在let和const命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量康震,從一開(kāi)始就形成了封閉作用域燎含。凡是在聲明之前就使用這些變量,就會(huì)報(bào)錯(cuò)腿短。
  • 不允許重復(fù)聲明 :let不允許在相同作用域內(nèi)屏箍,重復(fù)聲明同一個(gè)變量。

塊級(jí)作用域

  • ES5 只有全局作用域和函數(shù)作用域橘忱,沒(méi)有塊級(jí)作用域赴魁。

  • let實(shí)際上為 JavaScript 新增了塊級(jí)作用域。

  • 塊級(jí)作用域的出現(xiàn)钝诚,實(shí)際上使得獲得廣泛應(yīng)用的立即執(zhí)行函數(shù)表達(dá)式(IIFE)不再必要了颖御。

  • ES5 規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明凝颇,不能在塊級(jí)作用域聲明潘拱。

  • ES6 引入了塊級(jí)作用域,明確允許在塊級(jí)作用域之中聲明函數(shù)拧略。ES6 規(guī)定泽铛,塊級(jí)作用域之中,函數(shù)聲明語(yǔ)句的行為類(lèi)似于let辑鲤,在塊級(jí)作用域之外不可引用盔腔。

  • ES6在附錄B里面規(guī)定,瀏覽器的實(shí)現(xiàn)可以不遵守上面的規(guī)定月褥,有自己的行為方式弛随。

    • 允許在塊級(jí)作用域內(nèi)聲明函數(shù)。
    • 函數(shù)聲明類(lèi)似于var宁赤,即會(huì)提升到全局作用域或函數(shù)作用域的頭部舀透。
    • 同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部决左。

do 表達(dá)式

  • 塊級(jí)作用域之前加上do愕够,使它變?yōu)閐o表達(dá)式,從而使得塊級(jí)作用域可以變?yōu)楸磉_(dá)式佛猛,也就是說(shuō)可以返回值惑芭。

const命令

  • const聲明一個(gè)只讀的常量(常量索引)。一旦聲明继找,常量的值就不能改變遂跟。
  • 對(duì)于const來(lái)說(shuō),只聲明不賦值,就會(huì)報(bào)錯(cuò)幻锁。
  • const的作用域與let命令相同:只在聲明所在的塊級(jí)作用域內(nèi)有效凯亮。
  • const命令聲明的常量也是不提升,同樣存在暫時(shí)性死區(qū)哄尔,只能在聲明的位置后面使用假消。
  • const聲明的常量,也與let一樣不可重復(fù)聲明岭接。
  • const實(shí)際上保證的置谦,并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址不得改動(dòng)亿傅。
  • 想將對(duì)象凍結(jié)媒峡,應(yīng)該使用Object.freeze方法。

ES6 聲明變量的六種方法

  • var命令和function命令葵擎;(ES5 只有這兩種聲明變量的方法)
  • let和const命令谅阿;
  • import命令和class命令。

頂層對(duì)象的屬性

  • 頂層對(duì)象酬滤,在瀏覽器環(huán)境指的是window對(duì)象签餐,在Node指的是global對(duì)象。ES5之中盯串,頂層對(duì)象的屬性與全局變量是等價(jià)的氯檐。
  • ES6為了改變這一點(diǎn),一方面規(guī)定体捏,為了保持兼容性冠摄,var命令和function命令聲明的全局變量,依舊是頂層對(duì)象的屬性几缭;另一方面規(guī)定河泳,let命令、const命令年栓、class命令聲明的全局變量拆挥,不屬于頂層對(duì)象的屬性。也就是說(shuō)某抓,從ES6開(kāi)始纸兔,全局變量將逐步與頂層對(duì)象的屬性脫鉤。

global 對(duì)象

  • ES5的頂層對(duì)象否副,本身也是一個(gè)問(wèn)題汉矿,因?yàn)樗诟鞣N實(shí)現(xiàn)里面是不統(tǒng)一的:

    • 瀏覽器里面,頂層對(duì)象是window副编,但 Node 和 Web Worker 沒(méi)有window负甸。
    • 瀏覽器和 Web Worker 里面流强,self也指向頂層對(duì)象痹届,但是Node沒(méi)有self呻待。
    • Node 里面,頂層對(duì)象是global队腐,但其他環(huán)境都不支持蚕捉。
  • 同一段代碼為了能夠在各種環(huán)境,都能取到頂層對(duì)象柴淘,現(xiàn)在一般是使用this變量迫淹,但是有局限性:
    - 全局環(huán)境中,this會(huì)返回頂層對(duì)象为严。但是敛熬,Node模塊和ES6模塊中,this返回的是當(dāng)前模塊第股。

    • 函數(shù)里面的this应民,如果函數(shù)不是作為對(duì)象的方法運(yùn)行,而是單純作為函數(shù)運(yùn)行夕吻,this會(huì)指向頂層對(duì)象诲锹。但是,嚴(yán)格模式下涉馅,這時(shí)this會(huì)返回undefined归园。
    • 不管是嚴(yán)格模式,還是普通模式稚矿,new Function('return this')()庸诱,總是會(huì)返回全局對(duì)象。但是晤揣,如果瀏覽器用了CSP(Content Security Policy偶翅,內(nèi)容安全政策),那么eval碉渡、new Function這些方法都可能無(wú)法使用聚谁。
  • 現(xiàn)在有一個(gè)提案,在語(yǔ)言標(biāo)準(zhǔn)的層面滞诺,引入global作為頂層對(duì)象形导。也就是說(shuō),在所有環(huán)境下习霹,global都是存在的朵耕,都可以從它拿到頂層對(duì)象。

箭頭函數(shù)

var f = v => v;
等價(jià)于:var f = function(v) {
return v;
};

  • 箭頭函數(shù)有幾個(gè)使用注意點(diǎn)淋叶。

(1)函數(shù)體內(nèi)的this對(duì)象阎曹,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。

(2)不可以當(dāng)作構(gòu)造函數(shù)处嫌,也就是說(shuō)栅贴,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤熏迹。

(3)不可以使用arguments對(duì)象檐薯,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用注暗,可以用Rest參數(shù)代替坛缕。

(4)不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)捆昏。

  • 箭頭函數(shù)里面根本沒(méi)有自己的this赚楚,而是引用外層的this。
  • 箭頭后面是大括號(hào)的代碼塊時(shí)需要在大括號(hào)外面加上小括號(hào)骗卜。

Class

  • 類(lèi)的數(shù)據(jù)類(lèi)型就是函數(shù)宠页,類(lèi)本身就指向構(gòu)造函數(shù)。
  • 直接對(duì)類(lèi)使用new命令膨俐,跟構(gòu)造函數(shù)的用法完全一致勇皇。
  • 構(gòu)造函數(shù)的prototype屬性,在ES6的“類(lèi)”上面繼續(xù)存在焚刺。事實(shí)上敛摘,類(lèi)的所有方法都定義在類(lèi)的prototype屬性上面,在類(lèi)的實(shí)例上面調(diào)用方法,其實(shí)就是調(diào)用原型上的方法乳愉。
  • 類(lèi)的內(nèi)部所有定義的方法兄淫,都是不可枚舉的(non-enumerable)。
  • constructor方法是類(lèi)的默認(rèn)方法蔓姚,通過(guò)new命令生成對(duì)象實(shí)例時(shí)捕虽,自動(dòng)調(diào)用該方法。一個(gè)類(lèi)必須有constructor方法坡脐,如果沒(méi)有顯式定義泄私,一個(gè)空的constructor方法會(huì)被默認(rèn)添加。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末备闲,一起剝皮案震驚了整個(gè)濱河市晌端,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恬砂,老刑警劉巖咧纠,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異泻骤,居然都是意外死亡漆羔,警方通過(guò)查閱死者的電腦和手機(jī)梧奢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)演痒,“玉大人亲轨,你說(shuō)我怎么就攤上這事〉障迹” “怎么了瓶埋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵希柿,是天一觀(guān)的道長(zhǎng)诊沪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)曾撤,這世上最難降的妖魔是什么端姚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮挤悉,結(jié)果婚禮上渐裸,老公的妹妹穿的比我還像新娘。我一直安慰自己装悲,他們只是感情好昏鹃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著诀诊,像睡著了一般洞渤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上属瓣,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天载迄,我揣著相機(jī)與錄音,去河邊找鬼抡蛙。 笑死护昧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粗截。 我是一名探鬼主播惋耙,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼熊昌!你這毒婦竟也來(lái)了绽榛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浴捆,失蹤者是張志新(化名)和其女友劉穎蒜田,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體选泻,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冲粤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年美莫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯捕。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厢呵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傀顾,到底是詐尸還是另有隱情襟铭,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布短曾,位于F島的核電站寒砖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫉拐。R本人自食惡果不足惜哩都,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婉徘。 院中可真熱鬧漠嵌,春花似錦、人聲如沸盖呼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)几晤。三九已至约炎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锌仅,已是汗流浹背章钾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留热芹,地道東北人贱傀。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伊脓,于是被迫代替她去往敵國(guó)和親府寒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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