系列文章目录
ES6中 对象字面量、解构赋值、var,let ,const、块及作用域、展开运算符与剩余参数相关知识点
ES6中 Map 集合类型知识点、常见使用场景、以及案例
ES6中 Set集合知识点、常见使用场景、以及案例
ES6中 迭代器与生成器,相关知识点、常见使用场景、以及案例
ES6中 Promise 相关知识点、常见使用场景、以及案例
ES6中 箭头函数、this的指向问题
ES7:includes()、指数运算符 详细教程
ES8:async/await、Object 的新静态方法、padStart/padEnd、函数参数列表末尾允许逗号 相关知识点
ES9:对象扩展与剩余参数运算符、异步迭代、Promise新增方法、模板字符串修订 相关知识点
ES10:数组扁平化、对象转换、字符串修剪、catch参数、Symbol描述文字、toString修、sort排序、标准化的globalThis 相关知识点
ES11:可选链操作符、空值合并运算符、allSettled、动态导入、matchAll、meta 相关知识点
ES12:逻辑赋值运算符、数字分隔符、replaceAll、Promise新方法、WeakRef、Setter/Getter 相关知识点
ES13:类私有属性和方法、顶层 await、at() 方法、Object.hasOwnProperty()、类静态块 相关知识点
ES14:数组的新"拷贝并修改"方法、findLast() 和 findLastIndex()、 Symbol 作为 WeakMap 的键 相关知识点
ES15:Object.groupBy() 和 Map.groupBy()、Promise.withResolvers() 相关知识点
ES16:Set 集合方法增强、Promise.try、迭代器助手、JSON 模块导入 相关知识
文章目录
- 系列文章目录
- [一、Set 集合方法增强 (New Set Methods)](#一、Set 集合方法增强 (New Set Methods))
- 二、Promise.try
- 三、迭代器助手 (Iterator Helpers)
- [四、JSON 模块导入 (Import Attributes)](#四、JSON 模块导入 (Import Attributes))
ECMAScript 2025(简称 ES16)已于 2025 年 6 月正式获批。这一版本聚焦于提升集合处理 、异步编程安全性 和数据类型的精细化。
以下是 ES16 引入的所有核心新功能及其详细教程。
一、Set 集合方法增强 (New Set Methods)
- 这是 ES16 最受期待的更新。过去我们需要通过 Array.from 手写交集、并集,现在内置了 7 个新方法。
- 所有的数学运算方法(union, intersection, difference, symmetricDifference)都会返回一个全新的 Set 对象。
javascript
const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);
// 1. 并集 (Union)
const union = setA.union(setB); // Set {1, 2, 3, 4, 5}
// 2. 交集 (Intersection)
const intersection = setA.intersection(setB); // Set {3}
// 3. 差集 (Difference) - A 有但 B 没有的
const difference = setA.difference(setB); // Set {1, 2}
// 4. 对称差集 (Symmetric Difference) - A 和 B 不同时拥有的
const symmetric = setA.symmetricDifference(setB); // Set {1, 2, 4, 5}
// 5. 关系判断
console.log(setA.isSubsetOf(new Set([1, 2, 3, 4]))); // true (子集)
console.log(setA.isSupersetOf(new Set([1, 2]))); // true (超集)
console.log(setA.isDisjointFrom(new Set([5, 6]))); // true (无交集)
二、Promise.try
Promise.try 旨在统一同步和异步代码的错误处理。它会将传入的函数执行结果(无论是直接返回值还是抛出错误)都封装成一个 Promise。
为什么需要它?
- 在旧版本中,如果一个函数内部可能同步抛错,你需要用 try...catch;如果它是异步报错,你需要 .catch()。Promise.try 将两者合二为一。
javascript
const getUserData = (id) => {
if (id < 0) throw new Error("ID无效"); // 同步错误
return fetch(`/api/user/${id}`); // 异步操作
};
// 统一捕获
Promise.try(() => getUserData(-1))
.then(data => console.log(data))
.catch(err => console.error("捕获到错误:", err.message));
// 无论是同步抛出的"ID无效"还是 fetch 的网络错误,都能在这里捕获
三、迭代器助手 (Iterator Helpers)
为迭代器(如 Map.keys()、Set.values() 或生成器返回的对象)添加了类似数组的函数式方法(map, filter, take 等),且这些方法是惰性求值的,非常节省内存。
javascript
function* infiniteNumbers() {
let i = 1;
while (true) yield i++;
}
const result = infiniteNumbers()
.filter(x => x % 2 === 0) // 过滤偶数
.map(x => x * 10) // 扩大10倍
.take(3) // 只取前3个
.toArray(); // 转换为数组
console.log(result); // [20, 40, 60]
四、JSON 模块导入 (Import Attributes)
现在你可以像导入 JS 模块一样安全地导入 JSON 文件,通过 with 关键字指定类型,浏览器会自动校验文件类型以提升安全性。
javascript
// 静态导入
import config from "./config.json" with { type: "json" };
// 动态导入
const data = await import("./data.json", { with: { type: "json" } });
console.log(config.api_key);