ECMAScript2020(ES11)新特性

概述

ECMAScript2020于2020年6月正式發布, 本文會介紹ECMAScript2020(ES11),即ECMAScript的第11個版本的新特性。

以下摘自官網:ecma-262

ECMAScript 2020, the 11th edition, introduced the matchAll method for Strings, to produce an iterator for all match objects generated by a global regular expression; import(), a syntax to asynchronously import Modules with a dynamic specifier; BigInt, a new number primitive for working with arbitrary precision integers; Promise.allSettled, a new Promise combinator that does not short-circuit; globalThis, a universal way to access the global this value; dedicated export * as ns from ‘module’ syntax for use within modules; increased standardization of for-in enumeration order; import.meta, a host-populated object available in Modules that may contain contextual information about the Module; as well as adding two new syntax features to improve working with “nullish” values (undefined or null): nullish coalescing, a value selection operator; and optional chaining, a property access and function invocation operator that short-circuits if the value to access/invoke is nullish.

ECMAScript2020(ES11)

ES2020的新特性如下:

  • 動態導入 (Dynamic Import)
  • BigInt大整數類型
  • Promise.allSettled
  • String.matchAll
  • globalThis
  • import.meta
  • 模塊命名空間導出
  • for-in循環枚舉標準化
  • 其它

動態導入 import語法

ES2020增強了import語法,用于動態導入模塊,允許在運行時按需導入,返回一個Promise,適用于懶加載。

// 傳統靜態導入(必須位于文件頂部)
// import { sum } from './math.js';// 動態導入(按需加載)
async function loadMathModule() {const mathModule = await import('./math.js');console.log(mathModule.sum(1, 2)); // 3
}// 條件加載示例
if (needFeatureX) {import('./feature-x.js').then(module => {module.init();});
}
兼容性

大數運算 BigInt類型

BigIntES2020引入的新的數值類型,用于表示任意精度的整數,解決了Number類型無法處理超出2^53-1的數值問題。通過在數字末尾添加n或者調用BigInt()函數創建。

// 創建 BigInt
const maxSafeInt = Number.MAX_SAFE_INTEGER; // 9007199254740991
const bigInt1 = 9007199254740992n; // 直接加 n
const bigInt2 = BigInt(9007199254740992); // 函數轉換// 大數運算
console.log(bigInt1 + 1n); // 9007199254740993n
console.log(bigInt1 * 2n); // 18014398509481984n// 注意:BigInt 不能與 Number 直接運算
// console.log(bigInt1 + 1); // 錯誤!TypeError
console.log(bigInt1 + BigInt(1)); // 正確
兼容性

Promise.allSettled方法

Promise.allSettled方法接收一個Promise數組,返回一個新的Promise,該Promise在所有輸入的Promise都已完成(無論成功或失敗)后,才會完成。

const promises = [Promise.resolve(1),Promise.reject('Error'),Promise.resolve(3)
];Promise.allSettled(promises).then(results => {console.log(results);// [//   { status: 'fulfilled', value: 1 },//   { status: 'rejected', reason: 'Error' },//   { status: 'fulfilled', value: 3 }// ]});
兼容性

字符串 matchAll方法

matchAll方法返回一個迭代器,包含所有匹配正則表達式的結果,每個結果都是一個數組,包含匹配的字符串和捕獲組。

const str = "Hello world, hello ES2020!";
const regex = /hello (\w+)/gi;// 使用 matchAll 獲取所有匹配結果(包括捕獲組)
const matches = str.matchAll(regex);for (const match of matches) {console.log(`匹配內容: ${match[0]}`); // 完整匹配console.log(`捕獲組: ${match[1]}`);  // 第一個捕獲組console.log(`索引位置: ${match.index}`);
}
匹配內容: Hello world
捕獲組: world
索引位置: 0
匹配內容: hello ES2020
捕獲組: ES2020
索引位置: 13
兼容性

全局對象 globalThis

globalThis是統一返回全局對象的方式,瀏覽器window、Node.jsglobal、Web Workerself等都可以通過globalThis訪問。

// 舊環境檢測全局對象的方式(繁瑣且不統一)
const globalObj = typeof window !== 'undefined' ? window :typeof global !== 'undefined' ? global :self;// 新方式(統一且簡潔)
console.log(globalThis === window); // 瀏覽器環境中為 true
console.log(globalThis === global); // Node.js 環境中為 true
兼容性

模塊元數據 import.meta

import.meta提供了關于當前模塊的元數據信息,例如模塊的 URL、導入的依賴等,具體內容由宿主環境決定;且其僅在模塊type='module'中可用。

// 在瀏覽器環境中
console.log(import.meta.url); 
// 輸出當前模塊的 URL,如 "http://example.com/main.js"// 在 Vite 等構建工具中
console.log(import.meta.env.MODE); 
// 輸出當前環境模式(如 "development" 或 "production")
兼容性

模塊命名空間導出

export * as namespace語法可以簡化模塊重新導出,允許將一個模塊的所有導出內容聚合到一個命名空間對象中導出。等同于先導入再導出,但沒有中間變量

// 舊寫法
import * as utils from './utils.js';
export { utils };// 新寫法(一行搞定)
export * as utils from './utils.js';
兼容性

for-in枚舉順序標準化

ES2020明確規定for-in循環遍歷對象屬性的順序:

  • 數字鍵(按升序排列)
  • 字符串鍵(按添加順序排列)
  • Symbol鍵(按添加順序排列)
const obj = { b: 2, 1: 100, a: 1 };
obj[3] = 300;for (const key in obj) {console.log(key); // 輸出順序:1 → 3 → b → a
}

其它

ES2020對空值處理也進行了更新,如下:

  • 空值合并運算符??

1.僅當左側值為nullundefined時,才會返回右側值。
2.解決了邏輯或運算符||會誤判0''false等假值的問題

const name = null;
const displayName = name ?? "匿名用戶";
console.log(displayName); // "匿名用戶"const count = 0;
const displayCount = count ?? "無數據";
console.log(displayCount); // 0(而非 "無數據")// 對比 || 的區別
console.log(count || "無數據"); // "無數據"(誤判)
兼容性
  • 可選鏈運算符?.
  1. 可選鏈運算符?.用于安全地訪問對象的屬性,避免出現TypeError錯誤。
  2. 當屬性不存在時,返回undefined,而不是拋出錯誤。
  3. 支持屬性訪問(obj?.prop)、方法調用(obj?.method())和數組索引(obj?.array[index])
const user = {profile: {name: "Alice",address: {city: "Beijing"}}
};// 舊寫法(繁瑣)
const city = user && user.profile && user.profile.address && user.profile.address.city;// 新寫法(簡潔)
const city2 = user?.profile?.address?.city;
console.log(city2); // "Beijing"// 安全調用可能不存在的方法
user.profile.getAge?.(); // 若方法不存在,返回 undefined 而非報錯// 安全訪問可能不存在的數組索引
const arr = null;
console.log(arr?.[0]); // undefinedjs
兼容性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91733.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器視覺引導機器人修磨加工系統助力芯片封裝

芯片制造中,劈刀同軸度精度對封裝質量至關重要。傳統加工在精度、效率、穩定性、良率及操作便捷性上存在不足:精度不足:劈刀同軸度需控在 0.003mm 內,傳統手段難達標,致芯片封裝良率低;效率良率低 &#xf…

Python編程基礎與實踐:Python模塊與包入門實踐

Python模塊與包的深度探索 學習目標 通過本課程的學習,學員將掌握Python中模塊和包的基本概念,了解如何導入和使用標準庫中的模塊,以及如何創建和組織自己的模塊和包。本課程將通過實際操作,幫助學員加深對Python模塊化編程的理解…

【Django】-4- 數據庫存儲和管理

一、關于ORM ORM 是啥呀ORM 就是用 面向對象 的方式,把數據庫里的數據還有它們之間的關系映射起來~就好像給數據庫和面向對象之間搭了一座小橋梁🎀對應關系大揭秘面向對象和數據庫里的東西,有超有趣的對應呢👇類 → 數…

深入 Go 底層原理(四):GMP 模型深度解析

1. 引言在上一篇文章中,我們宏觀地了解了 Go 的調度策略。現在,我們將深入到構成這個調度系統的三大核心組件:G、M、P。理解 GMP 模型是徹底搞懂 Go 并發調度原理的關鍵。本文將詳細解析 G、M、P 各自的職責以及它們之間是如何協同工作的。2.…

AI賦能測試:技術變革與應用展望

AI 在測試中的應用:技術賦能與未來展望 目錄 AI 在測試中的應用:技術賦能與未來展望 1. 引言 1.1 測試在軟件開發中的重要性 1.2 AI 技術如何改變傳統測試模式 1.3 文章結構概述 2. AI 在測試中的核心應用場景 2.1 自動化測試優化 2.1.1 智能測…

Mujoco(MuJoCo,全稱Multi - Joint dynamics with Contact)一種高性能的物理引擎

Mujoco(MuJoCo,全稱Multi - Joint dynamics with Contact)是一種高性能的物理引擎,主要用于模擬多體動力學系統,廣泛應用于機器人仿真、運動學研究、人工智能等領域。以下是關于Mujoco仿真的一些詳細介紹: …

winform-窗體應用的功能介紹(部分)

1--Point實現在窗口(Form)中一個按鈕(控件)的固定位置(所在位置)一個按鈕(控件)的位置一般是固定的,另一個按鈕在窗口中位置是隨機產生的Location屬性:Location new Point(X,Y);在C#的Winform應用程序里,Button控件的鼠標懸標懸浮事件是不存在內置延遲時間的。當鼠標指針進入按…

最新Windows11系統鏡像,23H2 64位ISO鏡像

Windows 11 主要分為 Consumer Editions(消費者版)和 Business Editions(商業版)兩大類別 。消費者版主要面向家庭和個人用戶,商業版則側重于企業和商業用戶。這兩大類別中存在部分重疊的版本,比如專業版和…

linux基本系統服務——DNS服務

一、DNS域名解析原理DNS&#xff0c;Domain Name System&#xff0c;域名系統&#xff1a;在互聯網中由大量域名解析服務器共同提供的一整套關于“域名 <--> IP地址”信息查詢的數據系統!!!! C/S架構&#xff1a;DNS服務端監聽UDP 53端口&#xff08;處理客戶端查詢&…

數據處理和統計分析——08 apply自定義函數

1 apply()函數 1.1 apply()函數簡介 Pandas提供了很多數據處理的API&#xff0c;但當提供的API不能滿足需求的時候&#xff0c;需要自己編寫數據處理函數, 這個時候可以使用apply()函數&#xff1b;apply()函數可以接收一個自定義函數&#xff0c;可以將DataFrame的行或列數據傳…

C++冰箱管理實戰代碼

基于C++的冰箱管理實例 以下是一些基于C++的冰箱管理實例示例,涵蓋不同功能場景,每個示例聚焦特定實現點,代碼可直接擴展或整合到項目中。 示例1:基礎冰箱類定義 class Refrigerator { private:int capacity;std::vector<std::string> items; public:Refrigerator(…

【Python】【數據分析】Python 數據分析與可視化:全面指南

目錄1. 環境準備2. 數據處理與清洗2.1 導入數據2.2 數據清洗示例&#xff1a;處理缺失值示例&#xff1a;處理異常值2.3 數據轉換3. 數據分析3.1 描述性統計3.2 分組分析示例&#xff1a;按年齡分組計算工資的平均值3.3 時間序列分析4. 數據可視化4.1 基本繪圖示例&#xff1a;…

【AI】AIService(基本使用與指令定制)

【AI】AIService(基本使用與指令定制) 文章目錄【AI】AIService(基本使用與指令定制)1. 簡介2. AIService2.1 引入依賴2.2 編寫AIService接口2.3 測試代碼3. 指令定制3.1 系統提示詞3.2 用戶提示詞1. 簡介 AIService可以被視為應用程序服務層的一個組件&#xff0c;提供對應的…

AAAI趕稿后的心得

總結 已經第三次和老師們一起趕稿了&#xff0c;但是還是紕漏重重&#xff0c;每次都被我的垃圾寫作給嚇到。每次都手忙腳亂找不到重點&#xff0c;唉&#xff0c;我大概這輩子都成為不了郭老師&#xff1a; 自己把故事先捋清楚&#xff1a; 所有的東西都要抽象出來&#xff0c…

書籍推薦算法研究

## 項目概述本項目是一個完整的書籍推薦系統第五版(Complete Book Recommendation System V5),采用混合推薦策略,能夠處理6種不同的用戶場景,提供智能化的書籍推薦服務。## 系統架構### 核心設計思路系統采用**混合推薦策略**,結合了以下幾種推薦算法:1. **協同過濾推薦…

工具自動生成Makefile

cmake 基礎 cmake主要是生成Makefile&#xff0c;以便工程管理&#xff0c;只需要編寫CMakeLists.txt安裝camkesudo apt install cmake 安裝cmake camke --version 查看cmake版本 sudo apt upgrade cmake 升級cmake源碼隔離 在工程文件下創建一個build文件&…

Java項目:基于SSM框架實現的校園活動資訊網管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+遠程部署】

摘 要 使用舊方法對校園活動資訊進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在校園活動資訊的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不能及時糾正等問題。 這次開發的校園活動資訊網…

關于echarts的性能優化考慮

作為資深前端工程師&#xff0c;在處理 ECharts 性能問題時&#xff0c;核心思路是減少渲染壓力、優化數據處理、避免不必要的計算&#xff0c;尤其在大數據量&#xff08;萬級以上&#xff09;、高頻交互或多圖表場景下&#xff0c;性能優化尤為關鍵。以下是實戰中驗證過的有效…

汽車EDI:Vitesco EDI 項目案例

Vitesco Technologies&#xff08;緯湃科技&#xff09;脫胎于大陸集團的動力總成部門&#xff0c;是一家于2021年上市的全球領先汽車技術供應商。公司專注于電動出行領域&#xff0c;提供電驅動系統、電池管理系統、功率電子及熱管理等關鍵技術解決方案。同時&#xff0c;其業…

譯|Netflix 技術博客:一個利用視覺-語言模型和主動學習高效構建視頻分類器的框架

本篇介紹了Netflix的視頻標注器&#xff08;VA&#xff09;&#xff0c;一個利用視覺-語言模型和主動學習的交互式框架。其技術亮點在于通過人機協作系統&#xff0c;結合零樣本能力和主動學習&#xff0c;引導領域專家高效標注視頻數據&#xff0c;顯著提升了模型樣本效率和平…