网上流传的“代码大全”往往是一堆片段堆在一起,复制回去却跑不通。真正有用的整理方式,是按使用场景归类,并且注明每个片段的适用边界。下面这份清单聚焦日常开发中复用率最高的写法,重点是理解为什么这样写。
类型判断:别再用 typeof 走天下
typeof 对数组和 null 都会给出误导性结果。判断数组用 Array.isArray();判断普通对象可以用 Object.prototype.toString.call(val) === '[object Object]'。如果项目已在用现代语法,Object.prototype.toString 仍是兼容性最好的方案。
数组去重与对象合并
基本类型去重首选 [...new Set(arr)],简洁且性能稳定。对象数组去重则要按某个唯一键处理,用 Map 记录已出现的键即可,避免 filter + findIndex 的平方级复杂度。合并对象时注意 Object.assign 是浅拷贝,嵌套结构需要递归或 structuredClone。
防抖与节流
这两个函数几乎是“js代码大全”里的常客。防抖用于输入框搜索,节流用于滚动监听。关键在于保存定时器或时间戳的闭包变量,并返回一个带 cancel 方法的函数,方便组件卸载时清理,否则容易造成内存泄漏。
异步处理的稳妥写法
async/await 让代码更线性,但错误处理常被忽略。推荐用 try/catch 包裹,或封装一个返回 [err, data] 元组的工具函数,避免每层都写 try。并发请求用 Promise.all,但要注意任一失败即整体失败;需要容错时改用 Promise.allSettled。
容易被忽略的细节
- 深拷贝优先用
structuredClone,它支持 Date、Map、Set,但无法拷贝函数。 - 数字格式化用
Intl.NumberFormat,比手写正则更可靠。 - 获取查询参数用
URLSearchParams,别手动切割字符串。 - 事件监听记得传
{ passive: true }优化滚动性能。
小结
所谓 js代码大全,价值不在数量,而在准确和可维护。建议把常用片段沉淀成团队自己的工具库,配好注释和测试,比到处收藏零散代码更有效。遇到新写法时,先确认浏览器兼容性和边界条件,再放进项目。