i以下是 ECMAScript 2020(ES11) 的总结,用你之前喜欢的格式「概览 → 新特性一览 → 总结」:

🧩 一、总体概览

ECMAScript 2020 (ES11)在 2020 年6 月正式发布。(infoworld.com ) 这一版本的重点是提升异步代码的可读性、优化大数据结构的性能、增强模块导入能力、完善语言一致性。 总体风格是让 JavaScript 在大型工程、并发操作与底层逻辑处理方面更加现代化与安全。

🚀 二、主要新特性一览

  1. 动态导入(Dynamic Import)

新语法:

import('./module.js').then(module => { module.doSomething(); });

可在运行时按需导入模块(支持条件加载、懒加载、代码拆分)。

适合 SPA、动态组件加载、插件系统。

  1. BigInt — 任意精度整数

新增基本类型 BigInt ,用于表示超过 Number.MAX_SAFE_INTEGER (2⁵³ − 1) 的整数。

通过在整数后加 n 创建:

const big = 123456789012345678901234567890n; const sum = big + 2n; console.log(sum); // 123456789012345678901234567892n

适合:金融计算、加密算法、大数ID处理。

  1. 空值合并运算符 ??

用于为 null 或 undefined 提供默认值,而不会误判 0 或空字符串:

let name = userInput ?? "Anonymous";

替代传统的 || 在 falsy 值(如 0, "") 导致的误判问题。

  1. 可选链运算符 ?.

避免“Cannot read property of undefined”错误:

const street = user?.address?.street;

若任意层级不存在,则立即返回 undefined 而不报错。

可搭配 ?.() 调用方法、?.[] 访问数组或对象。

  1. Promise.allSettled()

类似 Promise.all(),但不会在遇到 reject 时立即中断。 返回所有 Promise 的状态与结果:

const results = await Promise.allSettled([ fetch('/ok'), fetch('/fail') ]); // 每项都有 { status: "fulfilled"/"rejected", value/reason }

用于批量异步任务的收集分析(如批处理、日志采集)。

  1. globalThis

标准化全局对象访问方式:

console.log(globalThis === window); // 浏览器 true console.log(globalThis === global); // Node.js true

解决了不同运行环境下 window、self、global 命名不一致的问题。

  1. for-in 机制修正

统一了 for...in 枚举顺序的行为,使不同 JS 引擎结果一致。

修复早期版本中 prototype 链继承属性的枚举差异问题。

  1. import.meta

提供模块自身的元数据:

console.log(import.meta.url); // 当前模块的 URL

可用于模块内部调试、路径定位、资源加载。

  1. String.prototype.matchAll()

新方法返回一个迭代器,用于匹配正则中的所有结果(包括分组):

const matches = "test1test2".matchAll(/t(e)(st(\d?))/g); for (const m of matches) console.log(m);

相比 match() 能同时获取所有捕获组,便于结构化提取。

  1. import/export 增强(Stage 4 特性)

ES Modules 正式支持 export * as ns from "module" 语法:

export * as utils from './utils.js';

方便在单处导出整个模块命名空间。

🧠 三、总结 类型 代表特性 影响 语法优化 ?., ?? 减少空值判断与默认值逻辑 异步改进 Promise.allSettled(), 动态导入 异步编程更安全、更灵活 全局环境 globalThis, import.meta 跨环境统一与模块自省 大数据处理 BigInt 支持高精度数值计算 字符串与正则 matchAll() 改进批量文本匹配能力

📌 整体意义: ECMAScript 2020 标志着 JavaScript 从“浏览器脚本语言”彻底走向“通用工程语言”阶段。 这些特性强化了:

类型安全性(BigInt)

可读性(?., ??)

异步编程(Promise.allSettled)

模块化与工程化(动态导入、globalThis、import.meta)