JavaScript 中实用的 API
1. URL查询参数解析
过去,要从一个URL中获取查询参数(如 id
),我们通常需要使用正则表达式或一连串的 split
方法,代码冗长且容易出错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function getQueryParam(url, param) { const search = url.split('?')[1]; if (!search) { return null; } const params = search.split('&'); for (let i = 0; i < params.length; i++) { const pair = params[i].split('='); if (pair[0] === param) { return decodeURIComponent(pair[1]); } } return null; }
const url = 'https://example.com/page?id=123&category=tech'; const id = getQueryParam(url, 'id');
|
现在,URLSearchParams
对象让这一切变得无比简单:
1 2 3
| const url = new URL('https://example.com/page?id=123&category=tech'); const id = url.searchParams.get('id');
|
内置的 URLSearchParams
不仅代码更短,而且在处理URL编码、多个同名参数等边缘情况时更加健壮可靠。
2. 对象深拷贝
深拷贝是面试和工作中的常见痛点,最广为人知但有缺陷的方法是 JSON.parse(JSON.stringify(obj))
,它无法处理 Date
对象、undefined
、等特殊类型。
1 2 3 4 5 6 7 8 9 10
| const original = { birth: new Date('1990-01-01'), id: undefined, };
const copy = JSON.parse(JSON.stringify(original));
console.log(copy.birth); console.log(copy.id);
|
现在,我们有了原生的、强大的深拷贝工具 structuredClone
:
1 2 3 4 5
| const copy = structuredClone(original);
console.log(copy.birth); console.log(original.birth === copy.birth);
|
structuredClone
是官方推荐的深拷贝方式,支持绝大多数数据类型(除函数、DOM节点等),彻底解决了 JSON
方法的弊端。
3. 数组分组
1 2 3 4 5 6 7 8 9 10 11 12 13
| const products = [ { name: '苹果', category: '水果' }, { name: '电视', category: '电器' } ];
const grouped = products.reduce((acc, product) => { const key = product.category; if (!acc[key]) { acc[key] = []; } acc[key].push(product); return acc; }, {});
|
ES2023 引入了 Object.groupBy()
,让分组操作变得语义化且极其简单。
1 2 3
| const grouped = Object.groupBy(products, product => product.category);
|
Object.groupBy()
将一个意图直接翻译成了一行代码,可读性远超复杂的 reduce
实现。