ES16:Set 集合方法增强、Promise.try、迭代器助手、JSON 模块导入 相关知识

系列文章目录

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 模块导入 相关知识


文章目录


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);
相关推荐
StockTV2 小时前
韩国市场API技术对接指南,涵盖实时行情、历史数据、指数信息、公司详情等功能
java·开发语言·python·php
penngo2 小时前
用 Claude Code 开发多人猜拳游戏:Go 语言实践
开发语言·游戏·golang
xiaoshuaishuai82 小时前
C# 实现不掉线的CRM
开发语言·c#
YuanDaima20482 小时前
大语言模型生命周期全链路解析:从架构基石到高效推理
开发语言·人工智能·python·语言模型·架构·transformer
Hilaku2 小时前
AI 生成的代码都是一坨屎?聊聊怎么给 Agent 制定工程约束
前端·javascript·ai编程
吴声子夜歌2 小时前
Vue3——使用Vue Router实现路由
前端·javascript·vue.js·vue-router
烛衔溟3 小时前
TypeScript 函数重载(Overloads)
javascript·ubuntu·typescript
bike兔兔3 小时前
Python实现CSV文件转Excel,一键格式转换办公小脚本
开发语言·windows·python
CDwenhuohuo3 小时前
小程序全局使用api
javascript·vue.js·小程序