📦 原生 API 看板 · 告别无用 npm 包袱

现代浏览器 & 手机端原生能力 —— 更轻 · 更快 · 更安全

💡 核心建议:在引入新依赖之前,优先查阅 MDN / Can I Use
下方 9 大常用场景 + 额外技巧,原生 API 完全够用,大幅降低项目体积与维护成本。
Intl.DateTimeFormat ← 替代 Moment.js
国际化日期/时间格式化
new Intl.DateTimeFormat('zh-CN', { dateStyle: 'full' }).format(new Date())
Chrome/Android 24+Edge 12+Firefox 29+Safari/iOS 10+
crypto.randomUUID() ← 替代 uuid
生成 v4 UUID
const id = crypto.randomUUID(); // "a1b2c3d4-..."
Chrome ≥92Edge ≥92Firefox ≥95Safari/iOS ≥15.4
Optional Chaining ?. ← 替代 lodash get
安全访问深层属性
const city = user?.address?.city ?? '未知';
Chrome ≥80Edge ≥80Firefox ≥74Safari/iOS ≥13.4
URLSearchParams ← 替代 query-string
解析 & 构建查询参数
new URLSearchParams(location.search).get('id')
Chrome ≥49Edge ≥17Firefox ≥44Safari/iOS ≥10.3
fetch() ← 替代 axios
现代 HTTP 请求
const res = await fetch('/api'); const data = await res.json();
Chrome ≥40Edge ≥14Firefox ≥39Safari/iOS ≥10.3
structuredClone() ← 替代 cloneDeep
深拷贝(支持循环引用)
const copy = structuredClone(original);
Chrome ≥98Edge ≥98Firefox ≥94Safari/iOS ≥15.4
⚠️ 不能克隆函数/DOM节点
AbortController ← 替代请求取消库
取消 fetch / 超时控制
const ctrl = new AbortController(); fetch(url, { signal: ctrl.signal }); ctrl.abort();
Chrome ≥66Edge ≥16Firefox ≥57Safari/iOS ≥12.2
IntersectionObserver ← 替代滚动/懒加载库
高性能监听元素可见性
new IntersectionObserver(entries => { ... }).observe(el);
Chrome ≥51Edge ≥15Firefox ≥55Safari/iOS ≥12.2
navigator.clipboard ← 替代 clipboard.js
复制文本到剪贴板
await navigator.clipboard.writeText('复制内容');
Chrome ≥66Edge ≥79Firefox ≥63Safari/iOS ≥13.4
🔒 需要 HTTPS + 用户手势

✨ 更多原生锦囊 · 进一步减少依赖


📱 iOS Safari 特别注意
clipboard 必须用户点击 + HTTPS;旧版 iOS 13.4 以下不支持 randomUUID / structuredClone,可做降级。
⚡ Node.js 后端同样可用
Node 18+ 原生支持 fetch, AbortController, 20+ 支持 structuredClone。
🧠 深拷贝与 JSON 的陷阱
JSON 丢失 Date/RegExp,且无法处理循环引用 → 用 structuredClone 更可靠。