# JavaScript 速查表

Source: https://codewiki.com/zh/cheatsheets/javascript/

## 值

- `const value = source` — 绑定不可重新赋值的块级名称
- `let value = source` — 绑定可以重新赋值的块级名称
- `value ?? fallback` — 仅当值为 `null` 或 `undefined` 时使用后备值
- `items.at(-1)` — 读取最后一项且不修改数组
- `Object.hasOwn(data, key)` — 明确检查对象自身是否有该属性

## 函数

- `const f = (x) => x + 1` — 从箭头函数返回一个表达式
- `function f(x) { return x + 1; }` — 声明具名函数
- `f(...values)` — 把可迭代对象展开为参数
- `f.call(owner, value)` — 用指定的接收者调用函数
- `f.bind(owner)` — 创建绑定了接收者的函数

## 集合

- `items.map(project)` — 逐项转换并生成新数组
- `items.filter(keep)` — 用匹配项生成新数组
- `items.find(match)` — 返回第一个匹配项，未找到则返回 `undefined`
- `items.some(match)` — 检查是否有任意一项匹配
- `items.every(match)` — 检查是否所有项都匹配

## 对象

- `{ ...base, key: value }` — 浅拷贝对象并覆盖一个属性
- `Object.entries(data)` — 读取对象自身可枚举的字符串键条目
- `Object.fromEntries(rows)` — 从键值对构建对象
- `delete data.key` — 删除对象自身可配置的属性
- `structuredClone(data)` — 深拷贝受支持的结构化数据

## 错误

- `throw new Error(message)` — 显式抛出错误
- `try { work(); } catch (error) { handle(error); }` — 处理同步异常
- `promise.catch(handle)` — 处理被拒绝的 Promise
- `finally { release(); }` — 无论结果如何都释放资源
- `error instanceof TypeError` — 检查错误是否属于已知类型

## 异步

- `await task` — 等待一个 Promise 敲定
- `await Promise.all(tasks)` — 收集全部结果，或在首次失败时拒绝
- `await Promise.allSettled(tasks)` — 收集每个兑现与拒绝结果
- `AbortSignal.timeout(ms)` — 创建超时后自动中止的信号
- `for await (const item of source)` — 依次消费异步可迭代对象

## 模块

- `export { value }` — 导出具名绑定
- `import { value } from './mod.js'` — 导入具名绑定
- `export default value` — 导出一个默认值
- `import('./mod.js')` — 动态加载模块并返回 Promise
- `import.meta.url` — 读取当前模块的 URL

## 字符串

- ```id: ${id}``` — 把值插入模板字面量
- `text.includes(part)` — 检查是否包含子字符串
- `text.replaceAll(a, b)` — 替换所有完全匹配的字符串
- `text.split(separator)` — 把文本拆分为数组
- `parts.join(separator)` — 把多个值连接为文本

## 输入边界

- `Number.parseInt(text, 10)` — 解析开头的十进制整数
- `Number.isFinite(value)` — 不进行类型强制转换，检查是否为有限数
- `encodeURIComponent(value)` — 编码一个 URL 组件
- `JSON.parse(text)` — 解析 JSON 文本
- `JSON.stringify(value)` — 序列化与 JSON 兼容的值
