i以下是 ECMAScript 2020(ES11) 的总结,用你之前喜欢的格式「概览 → 新特性一览 → 总结」:
🧩 一、总体概览
ECMAScript 2020 (ES11)在 2020 年6 月正式发布。(infoworld.com ) 这一版本的重点是提升异步代码的可读性、优化大数据结构的性能、增强模块导入能力、完善语言一致性。 总体风格是让 JavaScript 在大型工程、并发操作与底层逻辑处理方面更加现代化与安全。
🚀 二、主要新特性一览
新语法:
import('./module.js').then(module => { module.doSomething(); });
可在运行时按需导入模块(支持条件加载、懒加载、代码拆分)。
适合 SPA、动态组件加载、插件系统。
新增基本类型 BigInt ,用于表示超过 Number.MAX_SAFE_INTEGER (2⁵³ − 1) 的整数。
通过在整数后加 n 创建:
const big = 123456789012345678901234567890n; const sum = big + 2n; console.log(sum); // 123456789012345678901234567892n
适合:金融计算、加密算法、大数ID处理。
用于为 null 或 undefined 提供默认值,而不会误判 0 或空字符串:
let name = userInput ?? "Anonymous";
替代传统的 || 在 falsy 值(如 0, "") 导致的误判问题。
避免“Cannot read property of undefined”错误:
const street = user?.address?.street;
若任意层级不存在,则立即返回 undefined 而不报错。
可搭配 ?.() 调用方法、?.[] 访问数组或对象。
类似 Promise.all(),但不会在遇到 reject 时立即中断。 返回所有 Promise 的状态与结果:
const results = await Promise.allSettled([ fetch('/ok'), fetch('/fail') ]); // 每项都有 { status: "fulfilled"/"rejected", value/reason }
用于批量异步任务的收集分析(如批处理、日志采集)。
标准化全局对象访问方式:
console.log(globalThis === window); // 浏览器 true console.log(globalThis === global); // Node.js true
解决了不同运行环境下 window、self、global 命名不一致的问题。
统一了 for...in 枚举顺序的行为,使不同 JS 引擎结果一致。
修复早期版本中 prototype 链继承属性的枚举差异问题。
提供模块自身的元数据:
console.log(import.meta.url); // 当前模块的 URL
可用于模块内部调试、路径定位、资源加载。
新方法返回一个迭代器,用于匹配正则中的所有结果(包括分组):
const matches = "test1test2".matchAll(/t(e)(st(\d?))/g); for (const m of matches) console.log(m);
相比 match() 能同时获取所有捕获组,便于结构化提取。
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)