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);
相关推荐
Aaswk9 小时前
Java Lambda 表达式与流处理
java·开发语言·python
万邦科技Lafite9 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
我叫黑大帅9 小时前
为什么需要 @types/react?解决“无法找到模块 react 的声明文件”报错
前端·javascript·面试
之歆10 小时前
DAY_21JavaScript 深度解析:数组(Array)与函数(Function)(一)
前端·javascript
Cyber4K10 小时前
【Python专项】进阶语法-系统资源监控与数据采集(1)
开发语言·python·php
Le_ee11 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php
爱上好庆祝11 小时前
学习js的第七天(wed APIs的开始)
前端·javascript·css·学习·html·css3
yong999011 小时前
MATLAB读取高光谱图像
开发语言·matlab
2zcode12 小时前
基于MATLAB的肝病风险评估与分期分析系统设计与实现
开发语言·matlab
小小de风呀12 小时前
de风——【从零开始学C++】(五):内存管理
开发语言·c++