ECMAScript新特性

通趁瓤瘢看作js的標(biāo)準(zhǔn)化規(guī)范潭千,實(shí)際上js是ES的擴(kuò)展語言,ES只提供了最基本的語法衩侥,但僅停留在語言層面国旷。

ES2015(ES6)

最新ES標(biāo)準(zhǔn)的代表版本。

  • 相比于ES5.1的變化較大茫死;
  • 自此跪但,標(biāo)準(zhǔn)命名規(guī)則發(fā)生變化;
  • ES6也可以泛指2015之后的所有新標(biāo)準(zhǔn)峦萎,因此需要區(qū)別泛指和特指屡久。
let與塊級作用域
  • ES2015新增了塊級作用域,在此之前只有全局作用域和函數(shù)作用域爱榔;
  • for循環(huán)有兩層嵌套的作用域被环,循環(huán)體內(nèi)的變量是內(nèi)層獨(dú)立的作用域,不會被for循環(huán)本身的作用域影響详幽;
  • let沒有變量提升筛欢。
const

聲明后不允許被修改(不能重新指向一個新的內(nèi)存地址,并非不能修改恒量中的屬性成員)唇聘。

??最佳實(shí)踐:不用var版姑,主用const,配合let迟郎。

解構(gòu)
  1. 數(shù)組的解構(gòu)
  • 位置一一對應(yīng)剥险,逗號不可省略;
  • 剩余元素用...res宪肖,只能放在解構(gòu)的最后位置表制;
  • 超出部分為undefined
  • 可以用=設(shè)置默認(rèn)值控乾。
  1. 對象的解構(gòu)
  • 使用鍵值對應(yīng)對象中的屬性名么介;
  • 可以用:重命名。
模范字符串
  • 支持換行阱持;
  • 使用${}嵌入變量;
  • 在模板字符串之前添加一個標(biāo)簽魔熏,這個標(biāo)簽實(shí)際上是一個特殊的函數(shù)衷咽,意味調(diào)用這個函數(shù),能夠?qū)δ0遄址M(jìn)行加工蒜绽,實(shí)現(xiàn)文本的多元化镶骗、中英文翻譯、檢查不安全字符躲雅、實(shí)現(xiàn)小型等模板引擎等鼎姊。

字符串的擴(kuò)展方法:

  • includes()
  • startsWith()
  • endsWith
參數(shù)默認(rèn)值

直接用=后面接默認(rèn)值,帶有默認(rèn)值的參數(shù)需要放到最后。

...操作符
  • 接收剩余參數(shù)相寇,放在形參的最后慰于;
  • 展開數(shù)組,簡化操作唤衫。
const arr = ['foo', 'bar', 'baz']
console.log.apply(console, arr)
console.log(...arr)
箭頭函數(shù)與this

箭頭函數(shù)中沒有this的機(jī)制婆赠,不會改變箭頭函數(shù)的指向。

const person = {
  name: 'tom',
  // sayHi: function () {
  //   console.log(`hi, my name is ${this.name}`)
  // }
  sayHi: () => {
    console.log(`hi, my name is ${this.name}`)  // undefined
  },
  sayHiAsync: function () {
    // const _this = this
    // setTimeout(function () {
    //   console.log(_this.name)
    // }, 1000)

    console.log(this)
    setTimeout(() => {
      // console.log(this.name)
      console.log(this)
    }, 1000)
  }
}

person.sayHiAsync()
對象字面量的增強(qiáng)
  • 變量名如果和屬性名相同佳励,可以省略冒號休里;
  • 給對象添加函數(shù),可以省略冒號和function赃承;
  • 添加計算屬性名妙黍,在[]內(nèi)部可以添加任意表達(dá)式作為這個對象的屬性名。
對象擴(kuò)展方法
  • Object.assign

將多個源對象中的屬性復(fù)制到一個目標(biāo)對象中瞧剖。

  • Object.is
    可以區(qū)分+0-0拭嫁,NaN也等于NaN
Proxy(代理對象)
// Proxy 對象

const person = {
  name: 'zce',
  age: 20
}

const personProxy = new Proxy(person, {
  // 監(jiān)視屬性讀取
  get(target, property) {
    return property in target ? target[property] : 'default'
  },
  // 監(jiān)視屬性設(shè)置
  set(target, property, value) {
    if (property === 'age') {
      if (!Number.isInteger(value)) {
        throw new TypeError(`${value} is not an int`)
      }
    }
    target[property] = value
  }
})
  • 對比Object.defineProperty()
    • defineProperty只能監(jiān)視屬性的讀寫筒繁,Proxy能監(jiān)視更多的對象操作噩凹;
    • Proxy更好的支持?jǐn)?shù)組對象的監(jiān)視;
    • Proxy是以非侵入的方式監(jiān)管了對象的讀寫毡咏。
Reflect

統(tǒng)一提供一套用于操作對象的API驮宴。

Reflect屬于一個靜態(tài)類,內(nèi)部封裝了一系列對對象的底層操作呕缭。Reflect成員方法就是Proxy處理對象的默認(rèn)實(shí)現(xiàn)堵泽。

Promise

一種更優(yōu)的異步編程解決方案,解決了傳統(tǒng)異步編程中回調(diào)函數(shù)嵌套過深的問題恢总。

class類
  • 靜態(tài)方法
    靜態(tài)方法是掛載到類型上面的迎罗,所以在靜態(tài)方法內(nèi),this就不會指向某個實(shí)例對象片仿,而是當(dāng)前的類型
新增的數(shù)據(jù)結(jié)構(gòu)
  • Set(集合)
    內(nèi)部不允許重復(fù)纹安,常用于數(shù)組去重。

    • .size():返回集合長度
    • .add():向集合中添加元素
    • .has():判斷集合中是否有某值
    • .delete():刪除集合中的值
    • .clear():清空集合
  • Map(鍵值對集合)

    • 與對象的區(qū)別砂豌,可以使用任意類型的值作為對象的鍵
  • Symbol

    表示一個獨(dú)一無二的值厢岂。

    • 可以作為對象的鍵,可用于避免對象屬性名重復(fù)的問題阳距;
    • 可以模擬實(shí)現(xiàn)對象的私有成員塔粒;
    • .for()可以接收一個字符串,如果傳參非字符串也會被轉(zhuǎn)換成字符串筐摘,維護(hù)的是字符串和Symbol的對應(yīng)關(guān)系卒茬;
    • .toStringTag是一個內(nèi)置的Symbol常量晴弃;
    • Object.getOwnPropertySymbols獲取到對象中類型為Symbol的屬性名饰豺。
for ... of循環(huán)

以后會作為遍歷所有數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一方式。

  • 可以使用break關(guān)鍵字隨時終止循環(huán);
  • 實(shí)現(xiàn)可迭代接口是for ... of的前提轮听。
可迭代接口
// 實(shí)現(xiàn)可迭代接口Iterable
const obj = {
    store: ['foo', 'bar', 'baz'],
    [Symbol.iterator]: function () {
        const self = this
        let index = 0
        return {
            next: function () {
                const result = {
                    value: self.store[index],
                    done: index >= self.store.length
                }
                index++
                return result
            }
        }
    }
}
  • 迭代器設(shè)計模式:對外提供一個統(tǒng)一的接口去团,讓外部無需關(guān)心內(nèi)部的結(jié)構(gòu)掉弛。
generator

生成器函數(shù)會返回一個生成器對象搅幅,調(diào)用這個對象的next方法可以讓這個函數(shù)開始執(zhí)行,一旦遇到y(tǒng)ield堪置,函數(shù)執(zhí)行就會被暫停躬存,同時yield后面的值會作為next的結(jié)果返回。

ES2016概述

  • 數(shù)組新增includes方法舀锨;
  • 新增指數(shù)運(yùn)算符**岭洲。

ES2017概述

  • Object.values():返回對象中所有的值;
  • Object.entries():返回對象中所有的鍵值對坎匿;
  • Object.getOwnPropertyDescriptors():獲取對象中的完整描述信息盾剩;
  • String.padStart()/String.padEnd():用給定的字符串填充目標(biāo)字符串的開始或結(jié)束位置知道這個字符串達(dá)到制定長度為止;
  • 在函數(shù)參數(shù)中添加尾逗號替蔬。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末告私,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子承桥,更是在濱河造成了極大的恐慌驻粟,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凶异,死亡現(xiàn)場離奇詭異蜀撑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剩彬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門酷麦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喉恋,你說我怎么就攤上這事沃饶。” “怎么了轻黑?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵糊肤,是天一觀的道長。 經(jīng)常有香客問我苔悦,道長轩褐,這世上最難降的妖魔是什么椎咧? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任玖详,我火速辦了婚禮把介,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蟋座。我一直安慰自己拗踢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布向臀。 她就那樣靜靜地躺著巢墅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪券膀。 梳的紋絲不亂的頭發(fā)上君纫,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機(jī)與錄音芹彬,去河邊找鬼蓄髓。 笑死,一個胖子當(dāng)著我的面吹牛舒帮,可吹牛的內(nèi)容都是我干的会喝。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼玩郊,長吁一口氣:“原來是場噩夢啊……” “哼肢执!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起译红,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤预茄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后临庇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體反璃,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年假夺,在試婚紗的時候發(fā)現(xiàn)自己被綠了淮蜈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡已卷,死狀恐怖梧田,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侧蘸,我是刑警寧澤裁眯,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站讳癌,受9級特大地震影響穿稳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌坤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一逢艘、第九天 我趴在偏房一處隱蔽的房頂上張望旦袋。 院中可真熱鬧,春花似錦它改、人聲如沸疤孕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祭阀。三九已至,卻和暖如春鲜戒,著一層夾襖步出監(jiān)牢的瞬間专控,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工遏餐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踩官,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓境输,卻偏偏與公主長得像蔗牡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嗅剖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

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