找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

666

积分

0

好友

90

主题
发表于 昨天 01:50 | 查看: 0| 回复: 0

在JavaScript的日常开发中,我们往往依赖于一些常用的核心API,但ES6及后续版本中引入的一些“冷门”工具,却能在特定场景下显著提升代码的简洁性与健壮性。本文将深入解析8个容易被忽略但极其实用的ES6+ API,助你写出更优雅、更高效的代码。

1. Object.fromEntries()

Object.entries()方法将对象转换为键值对数组已被广泛使用,而它的逆操作Object.fromEntries()则能将符合特定格式的二维数组或可迭代对象(如Map)重新组合成一个对象。

const arr = [['name', 'Tom'], ['age', 18]];
const obj = Object.fromEntries(arr);
console.log(obj); // { name: "Tom", age: 18 }

它在处理URL查询参数时尤为方便:

const params = new URLSearchParams('a=1&b=2');
console.log(Object.fromEntries(params)); // { a: "1", b: "2" }
2. Array.prototype.flat() 与 flatMap()

手动递归或使用reduce来展平多维数组的时代已经过去。flat()方法接受一个深度参数,可以轻松“拍平”数组。

[1, [2, [3]]].flat(2); // [1, 2, 3]

flatMap()则更为强大,它相当于先对数组每个元素执行map(),再将结果展平一层。这在处理算法和数据结构问题时非常高效。

const arr = [1, 2, 3];
const res = arr.flatMap(x => [x, x * 2]);
// 结果: [1, 2, 2, 4, 3, 6]
3. Promise.allSettled()

Promise.all()不同,Promise.allSettled()不会因为单个Promise被拒绝而短路。它会等待所有Promise完成(无论成功或失败),并返回一个描述每个Promise结果的对象数组。

const promises = [
  Promise.resolve(1),
  Promise.reject('出错啦'),
  Promise.resolve(3)
];
Promise.allSettled(promises).then(console.log);
// 输出: [
//   { status: "fulfilled", value: 1 },
//   { status: "rejected", reason: "出错啦" },
//   { status: "fulfilled", value: 3 }
// ]

这非常适用于需要获取批量异步操作最终状态,且不希望单点失败影响整体结果收集的场景。

4. String.prototype.replaceAll()

以往需要替换字符串中所有匹配项时,必须使用带有全局标志g的正则表达式。现在,replaceAll()让这一操作变得直观。

"aaa---aaa".replaceAll("a", "b");
// 结果: "bbb---bbb"
5. Array.prototype.at()

该方法支持传入负数索引,用于访问从数组末尾开始计数的元素,让代码意图更清晰。

const arr = [10, 20, 30];
arr.at(-1); // 30,等同于 arr[arr.length - 1]
arr.at(-2); // 20
6. Object.hasOwn()

obj.hasOwnProperty()方法存在被对象自身覆盖或原型链上无此方法的风险。Object.hasOwn()以静态方法的形式提供了更安全、语义更清晰的属性存在性检查。

const obj = Object.create(null); // 创建一个没有原型的对象
obj.x = 1;
console.log(Object.hasOwn(obj, "x")); // true
7. Promise.any()

Promise.race()类似,但Promise.any()只关心是否有Promise成功。它接收一个Promise集合,并在其中任意一个成功时立即成功,仅当所有Promise都失败时才失败。

const list = [
  Promise.reject('CDN A失败'),
  Promise.resolve('CDN B成功'),
  Promise.reject('CDN C失败')
];
Promise.any(list).then(console.log); // 输出: 'CDN B成功'

这在实现多资源冗余加载(如从多个CDN源获取同个资源)时非常有用。

8. globalThis

在JavaScript的不同运行环境中,指向全局对象的属性各不相同(浏览器为window,Node.js为global,Web Workers为self)。globalThis提供了一个标准化的方式,让你无需判断环境即可访问全局对象。

// 在任何环境中都可用
globalThis.myGlobalVar = 'Hello';
console.log(globalThis.myGlobalVar); // 'Hello'

掌握这些API,并非追求新奇,而是为了在合适的场景下使用最恰当的工具。它们能够有效减少冗余代码,提升逻辑的清晰度与健壮性,是现代JavaScript开发者高效编程的得力助手。




上一篇:LeetCode大礼包算法题精解:DFS记忆化搜索解决购物优惠问题
下一篇:程序员独立开发微信小程序变现:技术门槛与收益分析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-12 08:14 , Processed in 0.082704 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表