最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

15個(gè)前端JavaScript開發(fā)超級(jí)實(shí)用的工具函數(shù)分享(建議收藏)

 更新時(shí)間:2026年04月10日 09:03:12   作者:前端Hardy  
這篇文章主要和大家分享了15個(gè)前端JavaScript開發(fā)超級(jí)實(shí)用的工具函數(shù),沒有復(fù)雜算法,也沒有花里胡哨的封裝,全是業(yè)務(wù)里真正常用的,復(fù)制到項(xiàng)目里就能跑,非常適合放進(jìn)自己的 utils 工具庫(kù)

大家好,今天給大家整理了一套前端日常開發(fā)高頻用到的工具函數(shù)

沒有復(fù)雜算法,也沒有花里胡哨的封裝,全是業(yè)務(wù)里真正常用的:時(shí)間格式化、手機(jī)號(hào)脫敏、防抖節(jié)流、深拷貝、URL參數(shù)解析……全部即插即用,復(fù)制到項(xiàng)目里就能跑,非常適合放進(jìn)自己的 utils 工具庫(kù)。

1. 時(shí)間格式化(最常用)

把時(shí)間戳 / Date 對(duì)象轉(zhuǎn)成 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. 節(jié)流(滾動(dòng)/點(diǎn)擊防重復(fù))

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. 深拷貝(處理對(duì)象/數(shù)組)

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 參數(shù)

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. 手機(jī)號(hào)脫敏

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. 數(shù)字千分位格式化

function formatMoney(num) {
  if (isNaN(num)) return '0'
  return Number(num).toLocaleString()
}

// 1234567 → 1,234,567

9. 存儲(chǔ)操作(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. 判斷數(shù)據(jù)類型

function getType(val) {
  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase()
}

// getType([]) → 'array'
// getType({}) → 'object'
// getType(null) → 'null'

11. 數(shù)組去重

function uniqueArr(arr) {
  return [...new Set(arr)]
}

12. 數(shù)組扁平化

function flatten(arr) {
  return arr.flat(Infinity)
}

13. 生成隨機(jī)字符串(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. 防抖立即執(zhí)行版(提交按鈕專用)

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. 滾動(dòng)到頂部(平滑)

function scrollToTop() {
  window.scrollTo({ top: 0, behavior: 'smooth' })
}

最后

這 15 個(gè)工具函數(shù)基本覆蓋了80% 前端業(yè)務(wù)場(chǎng)景,建議直接新建一個(gè) utils.js 全部存起來,以后開發(fā)至少快一倍。

到此這篇關(guān)于15個(gè)前端JavaScript開發(fā)超級(jí)實(shí)用的工具函數(shù)分享(建議收藏)的文章就介紹到這了,更多相關(guān)前端工具函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • axios取消請(qǐng)求、配置的操作方法

    axios取消請(qǐng)求、配置的操作方法

    Axios 是一個(gè)基于 Promise 的 HTTP 客戶端,用于瀏覽器和 Node.js,在實(shí)際開發(fā)中,有時(shí)候需要取消已經(jīng)發(fā)起的請(qǐng)求,同時(shí)也需要對(duì)請(qǐng)求進(jìn)行各種配置,以下分別介紹 Axios 取消請(qǐng)求和配置請(qǐng)求的方法,感興趣的朋友一起看看吧
    2025-02-02
  • 簡(jiǎn)單實(shí)現(xiàn)JS計(jì)算器功能

    簡(jiǎn)單實(shí)現(xiàn)JS計(jì)算器功能

    這篇文章主要教大家簡(jiǎn)單實(shí)現(xiàn)JS計(jì)算器功能,實(shí)現(xiàn)小數(shù)點(diǎn)校驗(yàn),重復(fù)計(jì)算,以及大量更符合用戶體驗(yàn)的操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JS ES6異步解決方案

    JS ES6異步解決方案

    這篇文章主要介紹了JS ES6異步解決方案,對(duì)異步感興趣的同學(xué),可以參考下
    2021-04-04
  • TypeScript?中使用?getter?和?setter的方法

    TypeScript?中使用?getter?和?setter的方法

    這篇文章主要介紹了TypeScript?中如何使用?getter?和?setter,?getter使我們能夠?qū)傩越壎ǖ皆谠L問屬性時(shí)調(diào)用的函數(shù),而?setter?將屬性綁定到在嘗試設(shè)置屬性時(shí)調(diào)用的函數(shù),需要的朋友可以參考下
    2023-04-04
  • JavaScript中document.forms[0]與getElementByName區(qū)別

    JavaScript中document.forms[0]與getElementByName區(qū)別

    在很多情況下JavaScript中document.forms[0]與getElementByName這兩種用法沒有區(qū)別,這片文章詳細(xì)的解釋了兩者的區(qū)別和用法,有興趣的朋友可以參考一下。
    2015-01-01
  • TypeScript聲明文件的實(shí)現(xiàn)示例

    TypeScript聲明文件的實(shí)現(xiàn)示例

    TypeScript聲明文件是一種包含TypeScript類型信息的.d.ts文件,它允許開發(fā)者為已存在的JavaScript代碼提供類型注解,這些文件不包含可執(zhí)行代碼,下面就來詳細(xì)的介紹一下TypeScript聲明文件的實(shí)現(xiàn),感興趣的可以了解一下
    2025-12-12
  • firefox插件Firebug的使用教程

    firefox插件Firebug的使用教程

    Firebug是Firefox下的一款開發(fā)類插件,現(xiàn)屬于Firefox的五星級(jí)強(qiáng)力推薦插件之一。
    2010-01-01
  • js中replace的用法總結(jié)

    js中replace的用法總結(jié)

    本篇文章主要是對(duì)js中replace的用法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • js算法中的排序、數(shù)組去重詳細(xì)概述

    js算法中的排序、數(shù)組去重詳細(xì)概述

    在js中實(shí)現(xiàn)數(shù)組排序,采用數(shù)組中sort方法實(shí)現(xiàn)還是比較簡(jiǎn)單的,下面有個(gè)不錯(cuò)的示例大家可以參考下
    2013-10-10
  • 原生js獲取left值和top值的三種方法

    原生js獲取left值和top值的三種方法

    下面小編就為大家?guī)硪黄鷍s獲取left值和top值的三種方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08

最新評(píng)論

久治县| 日照市| 凤庆县| 黄浦区| 西贡区| 梅河口市| 宣城市| 荣昌县| 阿瓦提县| 南安市| 澄江县| 上杭县| 浦县| 浙江省| 舞钢市| 神农架林区| 平利县| 黄浦区| 抚远县| 东丰县| 兴安盟| 台南市| 金阳县| 翁源县| 宜都市| 沙田区| 桂林市| 北流市| 依兰县| 陕西省| 仁布县| 定日县| 盐源县| 余干县| 股票| 茌平县| 郎溪县| 富源县| 长寿区| 寿阳县| 博兴县|