ES6-ES13新特性

ES6(ECMAScript 2015)

ES6 正式支持了類、模塊、迭代器、生成器、箭頭函數(shù)、Promise、反射、代理和眾多新的數(shù)據(jù)類型

  • let 和 const
  • 解構(gòu)賦值
  • 模板字符串
  • 函數(shù)參數(shù)默認(rèn)值和箭頭函數(shù)
  • 擴(kuò)展運(yùn)算符
  • 對(duì)象的屬性簡(jiǎn)寫
  • super 關(guān)鍵字
  • Symbol 變量
  • Set 和 Map 數(shù)據(jù)
  • 代理和反射
  • 迭代器
  • Promise
  • class 類
  • Module 模塊

es6

ES7(ECMAScript 2016)

ECMAScript 2016 中添加了以下功能:

  • Array.prototype.includes() 檢查數(shù)組是否包含給定值。
  • 求冪運(yùn)算符 (**): 4 ** 2 => 16

es8(ECMAScript 2017)

ECMAScript 2017 中添加了以下功能:

  • 異步函數(shù)(async/await)讓我們使用看起來(lái)像同步的語(yǔ)法來(lái)編寫異步代碼。
  • Object.values() 返回一個(gè)數(shù)組,其中包含給定對(duì)象的所有可枚舉字符串鍵屬性的值。
  • Object.entries() 返回一個(gè)數(shù)組,其中包含給定對(duì)象的所有可枚舉字符串鍵屬性的鍵值對(duì)。每對(duì)都被編碼為一個(gè)二元素?cái)?shù)組。
  • 字符串填充:字符串方法 String.padStart()String.padEnd() 插入填充文本,直到接收者足夠長(zhǎng):
    '7'.padStart(3, '0'); // '007'
    'yes'.padEnd(6, '!'); // 'yes!!!'
    
  • 函數(shù)參數(shù)列表和調(diào)用中的尾隨逗號(hào):自 ES3 以來(lái),數(shù)組文字和自 ES5 以來(lái)的對(duì)象文字中都允許使用尾隨逗號(hào)。它們現(xiàn)在也允許在函數(shù)調(diào)用和方法調(diào)用中使用。
  • Object.getOwnPropertyDescriptors()
  • 共享內(nèi)存和原子 (見提案)

ES9(ECMAScript 2018)

ECMAScript 2018 中添加了以下功能:

  • 異步迭代是同步迭代的異步版本。它基于 Promise:
    • 使用同步迭代,我們可以立即訪問每個(gè)項(xiàng)目。使用異步迭代,我們必須 await 在訪問項(xiàng)目之前。
    • 對(duì)于同步迭代,我們使用 for-of 循環(huán)。對(duì)于異步迭代,我們使用 for-await-of 循環(huán)。
  • 傳播到對(duì)象文字中:通過在對(duì)象文字中使用傳播(...),我們可以將另一個(gè)對(duì)象的屬性復(fù)制到當(dāng)前對(duì)象中。一個(gè)用例是創(chuàng)建對(duì)象的淺拷貝obj:
    const shallowCopy = {...obj};
    
  • 解構(gòu)屬性:當(dāng)對(duì)象解構(gòu)一個(gè)值時(shí),我們現(xiàn)在可以使用解構(gòu)語(yǔ)法(...)來(lái)獲取一個(gè)對(duì)象中所有以前未提及的屬性。
    const {a, ...remaining} = {a: 1, b: 2, c: 3};
    assert.deepEqual(remaining, {b: 2, c: 3});
    
  • Promise.prototype.finally() 與 finally try-catch-finally 語(yǔ)句的子句相關(guān)——類似于 Promise 方法如何.then() 與 try 子句 .catch() 相關(guān)并與 catch 子句相關(guān)。
    換句話說:.finally() 無(wú)論 Promise 是否被履行或拒絕,都會(huì)執(zhí)行回調(diào)。
  • 新的正則表達(dá)式功能
  • 模板文字修訂 允許在標(biāo)記模板中帶有反斜杠的文本在字符串文字中是非法的

ES10(ECMAScript 2019)

ECMAScript 2019 中添加了以下功能:

  • Array.prototype.flatMap() 工作方式類似.map(),但讓回調(diào)返回零個(gè)或多個(gè)值的數(shù)組,而不是單個(gè)值。然后將返回的數(shù)組連接起來(lái)并成為 .flatMap() 用例包括:
    • 同時(shí)過濾和映射
    • 將單個(gè)輸入值映射到多個(gè)輸出值
  • Array.prototype.flat() 將嵌套數(shù)組轉(zhuǎn)換為平面數(shù)組?;蛘?,我們可以告訴它應(yīng)該在哪個(gè)嵌套深度停止展平。
  • Object.fromEntries() 從可迭代的條目創(chuàng)建一個(gè)對(duì)象。每個(gè)條目都是一個(gè)包含屬性鍵和屬性值的二元素?cái)?shù)組。
  • 字符串方法.trimStart() 工作方式 .trimEnd() 類似 .trim(),但僅在字符串的開頭或結(jié)尾刪除空格。
  • 可選catch:如果我們不使用它,我們現(xiàn)在可以省略子句的參數(shù)。
  • Symbol.prototype.description 是讀取符號(hào)的描述。以前,描述包含在結(jié)果中,.toString() 但無(wú)法單獨(dú)訪問。
  • JSON 超集
  • 格式良好JSON.stringify()
  • Function.prototype.toString()修訂

ES11(ECMAScript 2020)

ECMAScript 2020 中添加了以下功能:

  • 新模塊功能

    • 動(dòng)態(tài)導(dǎo)入 import():正常的 import 語(yǔ)句是靜態(tài)的:我們只能在模塊的頂層使用它,它的模塊說明符是一個(gè)固定的字符串。import() 改變了這一點(diǎn)。它可以在任何地方使用(包括條件語(yǔ)句),我們可以計(jì)算它的參數(shù)。
    • import.meta 包含當(dāng)前模塊的元數(shù)據(jù)。它的第一個(gè)廣泛支持的屬性是 import.meta.url 包含一個(gè)帶有當(dāng)前模塊文件 URL 的字符串。
    • 命名空間重新導(dǎo)出:以下表達(dá)式導(dǎo)入'mod'命名空間對(duì)象中模塊的所有導(dǎo)出ns并導(dǎo)出該對(duì)象。
      `export * as ns from 'mod';`
      
  • 屬性訪問和方法調(diào)用的可選鏈接。可選鏈接的一個(gè)示例是:

    `value.?prop`
    

    此表達(dá)式的計(jì)算結(jié)果為 undefined。否則,它的計(jì)算結(jié)果為value.prop。當(dāng)某些屬性可能丟失時(shí),此功能在屬性讀取鏈中特別有用。

  • 空值合并運(yùn)算符 (??)

    value ?? defaultValue
    

    該運(yùn)算符允許我們?cè)谌鄙倌承﹥?nèi)容時(shí)使用默認(rèn)值。
    以前在這種情況下使用了邏輯或運(yùn)算符 (||),但它在這里有缺點(diǎn),因?yàn)橹灰髠?cè)是假的(這并不總是正確的),它就會(huì)返回默認(rèn)值。

  • Bigints – 任意精度整數(shù):Bigints 是一種新的原始類型。它支持可以任意大的整數(shù)(它們的存儲(chǔ)會(huì)根據(jù)需要增長(zhǎng))。

  • String.prototype.matchAll()/g:如果未設(shè)置標(biāo)志,則此方法拋出,并返回一個(gè)包含給定字符串的所有匹配對(duì)象的可迭代對(duì)象。

  • Promise.allSettled() 接收一個(gè)可迭代的 Promises。它返回一個(gè) Promise,一旦所有輸入的 Promise 都被解決,該 Promise 就會(huì)實(shí)現(xiàn)。實(shí)現(xiàn)值是一個(gè)數(shù)組,每個(gè)輸入 Promise 有一個(gè)對(duì)象——以下之一:

    • { status: 'fulfilled', value: ?fulfillment value? }
    • { status: 'rejected', reason: ?rejection value? }
  • globalThis 提供了一種訪問全局對(duì)象的方法,該對(duì)象可在瀏覽器和服務(wù)器端平臺(tái)(如 Node.js 和 Deno)上運(yùn)行。

  • for-in: 在 JavaScript 中部分指定對(duì)象枚舉順序

ES12(ECMAScript 2021)

ECMAScript 2021 中添加了以下功能:

  • String.prototype.replaceAll() 讓我們替換正則表達(dá)式或字符串的所有匹配項(xiàng)(.replace()僅替換第一次出現(xiàn)的字符串):
    'abbbaab'.replaceAll('b', 'x');
    // 'axxxaax'
    
  • Promise.any() 和 AggregateError:Promise.any() 返回一個(gè) Promise,一旦 Promise 的可迭代中的第一個(gè) Promise 完成,它就會(huì)完成。如果只有拒絕,則將它們放入 AggregateError 成為拒絕值的其中。
    Promise.any() 只對(duì)幾個(gè)中第一個(gè)實(shí)現(xiàn)的 Promise 感興趣時(shí)使用。
  • 邏輯賦值運(yùn)算符
    a ||= b;
    a &&= b;
    a ??= b;
    
  • 下劃線 ( _) 作為分隔符
    • 數(shù)字文字:123_456.789_012
    • Bigint 字面量:6_000_000_000_000_000_000_000_000n
      WeakRefs

ES13(ECMAScript 2022)

ES2022 可能會(huì)在 2022 年 6 月成為標(biāo)準(zhǔn)。以下提案已進(jìn)入第 4 階段,并計(jì)劃成為該標(biāo)準(zhǔn)的一部分:

  • 班級(jí)新成員
    • 現(xiàn)在可以通過以下方式創(chuàng)建屬性(公共插槽):
      • 實(shí)例公共字段
      • 靜態(tài)公共字段
    • 私有插槽是新的,可以通過以下方式創(chuàng)建:
      • 私有字段(實(shí)例私有字段和靜態(tài)私有字段)
      • 私有方法和訪問器(非靜態(tài)和靜態(tài))
    • 靜態(tài)初始化塊
  • 私有插槽檢查:以下表達(dá)式檢查是否obj有私有插槽#privateSlot:
    #privateSlot in obj
    
  • 模塊中的頂層 await:我們現(xiàn)在可以在模塊 await 的頂層使用,而不必再輸入異步函數(shù)或方法。
  • error.cause:Error 及其子類現(xiàn)在讓我們指定哪個(gè)錯(cuò)誤導(dǎo)致了當(dāng)前錯(cuò)誤:
    new Error('Something went wrong', {cause: otherError});
    
  • .at() 可索引值的方法讓我們可以讀取給定索引處的元素(如括號(hào)運(yùn)算符[])并支持負(fù)索引(與括號(hào)運(yùn)算符不同)。
    ['a', 'b', 'c'].at(0);
    // 'a'
    ['a', 'b', 'c'].at(-1);
    // 'c'
    
    以下“可索引”類型具有方法.at():
    • string
    • Array
    • 所有類型化數(shù)組類:Uint8Array 等。
  • RegExp 匹配索引:如果我們向正則表達(dá)式添加一個(gè)標(biāo)志,使用它會(huì)生成匹配對(duì)象,記錄每個(gè)組捕獲的開始和結(jié)束索引。
  • Object.hasOwn(obj, propKey) 提供了一種安全的方法來(lái)檢查對(duì)象 obj 是否具有帶有 key 的自己的屬性 propKey。與相比 Object.prototype.hasOwnProperty,它適用于所有對(duì)象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容