大家好,今天给大家整理了一套前端日常开发高频用到的工具函数。
没有复杂算法,也没有花里胡哨的封装,全是业务里真正常用的:时间格式化、手机号脱敏、防抖节流、深拷贝、URL参数解析……全部即插即用,复制到项目里就能跑,非常适合放进自己的 utils 工具库。
1. 时间格式化(最常用)
把时间戳 / Date 对象转成 YYYY-MM-DD HH:mm:ss
function formatDate(date, fmt = 'YYYY-MM-DD HH:mm:ss') {
if (!date) return ''
date = date instanceof Date ? date : new Date(date)
const o = {
'M+': date.getMonth() + 1,
'D+': date.getDate(),
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
}
if (/(Y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, date.getFullYear().toString().slice(4 - RegExp.$1.length))
}
for (const k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? o[k] : o[k].toString().padStart(2, '0')
)
}
}
return fmt
}
// 使用
formatDate(new Date()) // 2026-04-09 15:30:20
2. 防抖(输入搜索专用)
function debounce(fn, delay = 300) {
let timer = null
return function (...args) {
clearTimeout(timer)
timer = setTimeout(() => fn.apply(this, args), delay)
}
}
3. 节流(滚动/点击防重复)
function throttle(fn, interval = 500) {
let last = 0
return function (...args) {
const now = Date.now()
if (now - last >= interval) {
last = now
fn.apply(this, args)
}
}
}
4. 深拷贝(处理对象/数组)
function deepClone(obj, hash = new WeakMap()) {
if (obj === null || typeof obj !== 'object') return obj
if (hash.has(obj)) return hash.get(obj)
const clone = Array.isArray(obj) ? [] : {}
hash.set(obj, clone)
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key], hash)
}
}
return clone
}
5. 获取 URL 参数
function getQueryParams(url = location.href) {
const params = {}
new URL(url).searchParams.forEach((v, k) => (params[k] = v))
return params
}
// 使用
getQueryParams('https://xxx.com?id=1&name=test') // { id: '1', name: 'test' }
6. 手机号脱敏
function maskPhone(phone) {
if (!phone || phone.length !== 11) return phone
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}
// 13812345678 → 138****5678
7. 姓名脱敏
function maskName(name) {
if (!name) return ''
if (name.length === 1) return name
return name[0] + '*'.repeat(name.length - 1)
}
// 张三 → 张*
// 张三丰 → 张**
8. 数字千分位格式化
function formatMoney(num) {
if (isNaN(num)) return '0'
return Number(num).toLocaleString()
}
// 1234567 → 1,234,567
9. 存储操作(localStorage 封装)
const storage = {
set(key, val) {
localStorage.setItem(key, JSON.stringify(val))
},
get(key) {
const val = localStorage.getItem(key)
if (!val) return null
try {
return JSON.parse(val)
} catch {
return val
}
},
remove(key) {
localStorage.removeItem(key)
},
clear() {
localStorage.clear()
}
}
10. 判断数据类型
function getType(val) {
return Object.prototype.toString.call(val).slice(8, -1).toLowerCase()
}
// getType([]) → 'array'
// getType({}) → 'object'
// getType(null) → 'null'
11. 数组去重
function uniqueArr(arr) {
return [...new Set(arr)]
}
12. 数组扁平化
function flatten(arr) {
return arr.flat(Infinity)
}
13. 生成随机字符串(ID)
function randomStr(len = 8) {
const str = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
let res = ''
for (let i = 0; i < len; i++) {
res += str[Math.floor(Math.random() * str.length)]
}
return res
}
14. 防抖立即执行版(提交按钮专用)
function debounceImmediate(fn, delay = 500) {
let timer = null
return function (...args) {
const first = !timer
clearTimeout(timer)
timer = setTimeout(() => (timer = null), delay)
if (first) fn.apply(this, args)
}
}
15. 滚动到顶部(平滑)
function scrollToTop() {
window.scrollTo({ top: 0, behavior: 'smooth' })
}
最后
这 15 个工具函数基本覆盖了80% 前端业务场景,建议直接新建一个 utils.js 全部存起来,以后开发至少快一倍。
各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在知识的海洋里乘风破浪!