ES7新特性簡(jiǎn)介

? ? ? ECMAScript6 的開(kāi)發(fā)花費(fèi)了四年之久焕议,之后TC-39決定縮短開(kāi)發(fā)周期惯雳,采用年度周期來(lái)發(fā)布語(yǔ)言的新特性邪驮,以確保語(yǔ)言的迭代速率與性能的快速發(fā)展候味。

? ? 由于開(kāi)發(fā)周期的縮短,可想而知的是此后每個(gè)新的ES版本擁有的新特性會(huì)比從ES5時(shí)代變到ES6時(shí)代時(shí)少許多洪灯。為了標(biāo)識(shí)這種新的變化坎缭,新版本號(hào)不再重點(diǎn)描述版本的數(shù)字代號(hào),而是改為指明規(guī)范發(fā)布的年份签钩,因此掏呼,ES6也被稱為ES2015,而ES7也正式被命名為ES2016铅檩。TC-39小組決定將來(lái)所有的ES版本都采用如上的年份命名規(guī)則憎夷。

? ? ES2016(ES7)于2016年3月定稿,并且只向語(yǔ)言添加了三項(xiàng)內(nèi)容:

一昧旨、一個(gè)新的數(shù)學(xué)運(yùn)算符

二拾给、一個(gè)新的數(shù)組方法

三富拗、一種新的語(yǔ)法錯(cuò)誤


新特性一、冪運(yùn)算符

1.冪運(yùn)算符的符號(hào)

? ? 冪運(yùn)算符是兩個(gè)星號(hào)(**)鸣戴,其左側(cè)是底數(shù),右側(cè)則是指數(shù)粘拾,

ex: let res = 10 ** 2;

console.log(res); //100

console.log( res === Math.pow(10,2) ); //true

使用Math.pow()能獲得相同的結(jié)果窄锅,但顯然運(yùn)算符比方法顯得更為直觀。

2.冪運(yùn)算符的優(yōu)先級(jí)

? ? 冪運(yùn)算符的優(yōu)先級(jí)在JavaScript的二元運(yùn)算符中是最高的(但低于一元運(yùn)算符)缰雇。

ex:let res = 5 * 10 ** 2;

console.log(res); //500

會(huì)首先計(jì)算冪入偷,再與5相乘來(lái)產(chǎn)生最終結(jié)果500

3.冪運(yùn)算符操作數(shù)的限制

? ? 冪運(yùn)算符有一個(gè)稍顯獨(dú)特的限制: 運(yùn)算符左側(cè)不能是除了 ++ 或 -- 之外的任意一元表達(dá)式,

ex:let res = -5 ** 2; // 語(yǔ)法錯(cuò)誤

因?yàn)?-(負(fù)號(hào)運(yùn)算符)的二義性械哟,程序會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤疏之,因?yàn)?- 可以是 -5 也可以是 -25,如果想要消除-運(yùn)算符的二義性暇咆,需要額外添加括號(hào)锋爪,

ex:let res1 = - (5 ** 2); // 等于 -25

let res2 = (-5) ** 2; // 等于? 25

若為冪運(yùn)算表達(dá)式包裹括號(hào),那么 - 會(huì)作用在這整個(gè)表達(dá)式上爸业;而若你為 -5 包裹括

號(hào)其骄,則清楚表示想要獲取 -5 的二次冪。

在冪運(yùn)算符的左側(cè)表達(dá)式使用的是 ++ 或 -- 時(shí)扯旷,就無(wú)需使用括號(hào)拯爽,因?yàn)檫@兩個(gè)運(yùn)算符在操作數(shù)上的行為都被清晰定義了: ++ 或 -- 作為前綴會(huì)在其他任意運(yùn)算發(fā)生之前修改操作數(shù),而作為后綴則會(huì)在整個(gè)表達(dá)式計(jì)算完畢后才修改操作數(shù)钧忽。在冪運(yùn)算符左側(cè)的這兩種用法都是安全的毯炮,正如下面代碼所示:

let n = 2,

m = 2;

console.log(++n ** 2); // 9

console.log(n); // 3

console.log(m-- ** 2); // 4

console.log(m); // 1

此例中的 n 在冪運(yùn)算符被運(yùn)用之前就已被遞增,因此 n 會(huì)變?yōu)?3 耸黑,并且冪運(yùn)算的結(jié)果為 9 桃煎。而對(duì)于m 來(lái)說(shuō),在參與冪運(yùn)算時(shí)它的值仍然保持為 2 崎坊,在運(yùn)算之后才被遞減到1 备禀。



新特性二、Array.prototype.includes() 方法

? ? Array.prototype.includes() 方法接受兩個(gè)參數(shù):需要搜索的值奈揍、可選的搜索起始位置索引曲尸。當(dāng)提供了第二個(gè)參數(shù)時(shí), includes() 會(huì)從該位置開(kāi)始嘗試匹配(默認(rèn)的起始位置為 0 )男翰。若在數(shù)組中找到了該值另患,返回 true; 否則返回 false 。

ex: let vals = [1,2,3];

console.log(vals.includes(1)); //true

console.log(vals.includes(0)); //false

//從索引2開(kāi)始搜索

console.log(vals.includes(1,2)); //false

? ? 此處使用 1 去調(diào)用 vals.includes() 返回了 true 蛾绎,而使用 0 則會(huì)返回 false 昆箕,因?yàn)? 并不在此數(shù)組中鸦列。當(dāng)使用了第二個(gè)參數(shù)讓搜索從索引位置 2 (該位置的元素值是 3 )開(kāi)始進(jìn)行時(shí), vals.includes() 方法返回了 false 鹏倘,因?yàn)閿?shù)值 1 并不存在于位置 2 與數(shù)組末端之間薯嗤。

includes() 方法使用 === 運(yùn)算符來(lái)進(jìn)行值比較,僅有一個(gè)例外: NaN 被認(rèn)為與自身相等纤泵,盡管 NaN === NaN 的計(jì)算結(jié)果為 false 骆姐。這與 indexOf() 方法的行為不同,后者在比較時(shí)嚴(yán)格使用了 === 運(yùn)算符捏题。為了明白其中的差異玻褪,研究如下代碼:

let vals = [1, NaN, 2];

console.log(vals.indexOf(NaN)); // -1

console.log(vals.includes(NaN)); // true

vals.indexOf() 方法為 NaN 返回了 -1 ,盡管 NaN 實(shí)際上被包含在 vals 數(shù)組中公荧。

另一方面带射,由于使用不同的比較運(yùn)算符, vals.includes() 方法則為 NaN 返回了 true循狰。

在實(shí)現(xiàn)中的另一個(gè)怪異點(diǎn)是 +0 和 -0 被認(rèn)為是相等的窟社。在這個(gè)方面, indexOf() 與includes() 行為一致:

let vals = [1, +0, 2];

console.log(vals.indexOf(-0)); // 1

console.log(vals.includes(-0)); // true

此處的 indexOf() 與 includes() 都在傳入 -0 的時(shí)候找到了 +0 晤揣,因?yàn)樗鼈冋J(rèn)為這兩個(gè)值是相等的桥爽。注意這與 Object.is() 方法的行為有差異,后者認(rèn)為 +0 與 -0 是不同的值昧识。



新特性三钠四、函數(shù)作用域嚴(yán)格模式改動(dòng)

? ? ES2016 規(guī)定如果函數(shù)的參數(shù)被進(jìn)行解構(gòu)或是擁有默認(rèn)值,則在該函數(shù)內(nèi)部使用 "use strict" 指令將是違法的跪楞。當(dāng)函數(shù)體內(nèi)出現(xiàn)了 "use strict" 時(shí)缀去,該函數(shù)只允許使用簡(jiǎn)單參數(shù)列表(也就是所包含的參數(shù)沒(méi)有進(jìn)行解構(gòu),也沒(méi)有默認(rèn)值)甸祭。

ex:

// 沒(méi)有問(wèn)題缕碎,使用了簡(jiǎn)單參數(shù)列表

function okay(first, second) {

"use strict";

return first;

}

// 語(yǔ)法錯(cuò)誤

function notOkay1(first, second=first) {

"use strict";

return first;

}

// 語(yǔ)法錯(cuò)誤

function notOkay2({ first, second }) {

"use strict";

return first;

}

你依舊可以在只有簡(jiǎn)單參數(shù)列表的函數(shù)內(nèi)使用 "use strict" ,這也是 okay() 函數(shù)如預(yù)期正常工作的原因(就像在 ES5 中一樣)池户。 notOkay1() 函數(shù)則會(huì)有語(yǔ)法錯(cuò)誤咏雌,因?yàn)樗褂昧藚?shù)的默認(rèn)值。類似的校焦, notOkay2() 函數(shù)同樣有語(yǔ)法錯(cuò)誤赊抖,因?yàn)樗褂昧私鈽?gòu)參數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寨典,一起剝皮案震驚了整個(gè)濱河市氛雪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耸成,老刑警劉巖报亩,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浴鸿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弦追,警方通過(guò)查閱死者的電腦和手機(jī)岳链,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)劲件,“玉大人宠页,你說(shuō)我怎么就攤上這事】懿郑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵烤宙,是天一觀的道長(zhǎng)遍烦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)躺枕,這世上最難降的妖魔是什么服猪? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮拐云,結(jié)果婚禮上罢猪,老公的妹妹穿的比我還像新娘。我一直安慰自己叉瘩,他們只是感情好膳帕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著薇缅,像睡著了一般危彩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泳桦,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天汤徽,我揣著相機(jī)與錄音,去河邊找鬼灸撰。 笑死谒府,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浮毯。 我是一名探鬼主播完疫,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亲轨!你這毒婦竟也來(lái)了趋惨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惦蚊,失蹤者是張志新(化名)和其女友劉穎器虾,沒(méi)想到半個(gè)月后讯嫂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兆沙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年欧芽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葛圃。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡千扔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出库正,到底是詐尸還是另有隱情曲楚,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布褥符,位于F島的核電站龙誊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喷楣。R本人自食惡果不足惜趟大,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铣焊。 院中可真熱鬧逊朽,春花似錦、人聲如沸曲伊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坟募。三九已至绽榛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婿屹,已是汗流浹背灭美。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昂利,地道東北人届腐。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜂奸,于是被迫代替她去往敵國(guó)和親犁苏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • js簡(jiǎn)介 Js是一種基于事件和對(duì)象驅(qū)動(dòng)的解釋性扩所、松散性的語(yǔ)言围详。 一切皆對(duì)象 javascript 布蘭登艾奇 ...
    塔庫(kù)納瑪哈哈閱讀 1,195評(píng)論 0 2
  • 使用 typeof bar === “object” 判斷 bar 是不是一個(gè)對(duì)象有神馬潛在的弊端?如何避免這種弊...
    Roselle_c閱讀 340評(píng)論 0 0
  • JavaScript之父:Brendan Eich 。 -基本語(yǔ)法:借鑒了C語(yǔ)言和Java語(yǔ)言助赞。-數(shù)據(jù)結(jié)構(gòu):借鑒了...
    饑人谷_kule閱讀 581評(píng)論 0 0
  • 最近我寫了一篇博客文章,甚至做一篇關(guān)于ES6/ES2015在線課程买羞。你猜怎么樣?TC39-JavaScript最強(qiáng)...
    熊二不大閱讀 108,438評(píng)論 19 79
  • 【姓名】朱麗娜 【派別】文魁派 【導(dǎo)師】王玉印雹食、袁文魁 【舵主】羅婷予 昨天又聽(tīng)了尺素老師的道德經(jīng)畜普,感覺(jué)古人好偉大...
    大連娜娜閱讀 903評(píng)論 0 2