代码工具箱:18个实用的 JavaScript 函数

本文将分享一些实用的 JavaScript 代码片段,可以帮助你提升代码效率,简化开发流程。这些代码涵盖了常见的需求,例如 URL 处理、缓存清理、获取 CSS 变量等等,非常实用。

函数节流 📡

/** 函数节流计时器版本 */
function throttle(callback: Function, delay: number) {let timer: number | nullreturn function () {if (timer) returnconst args = arguments // 使用闭包保存参数数组timer = setTimeout(() => {callback.apply(null, args)timer = null}, delay)}
}

URL 解码 & 编码 💻

/** 编码 URL */
function encodeURL(url: string, isComponent = true): string {return isComponent ? encodeURIComponent(url) : encodeURI(url)
}/** 解码 URL */
function decodeURL(url: string, isComponent = true): string {return isComponent ? decodeURIComponent(url) : decodeURI(url)
}

使用 JavaScript 获取全局 CSS 变量 📡

/*** @description 使用 JS 获取全局 CSS 变量* @param cssVariableName 变量名* @returns {string} 变量值
*/
function getCssVariableValue(cssVariableName: string): string {return getComputedStyle(document.documentElement).getPropertyValue(cssVariableName)
}

使用 JS 设置全局 CSS 变量 💪

/*** @description 使用 JS 设置全局 CSS 变量* @param {string} cssVariableName 变量名* @param {string} cssVariableValue 变量值*/
function setCssVariableValue(cssVariableName: string, cssVariableValue: string): void {document.documentElement.style.setProperty(cssVariableName, cssVariableValue)
}

清除所有 cookie 🍪

/*** @description 清除所有 cookie*/
function clearCookie(): void {const keyList = document.cookie.match(/[^ =;]+(?=\=)/g) as string[] | nullkeyList && keyList.forEach(key => (document.cookie = `${key}=0;path=/;expires=${new Date(0).toUTCString()}`))
}

清除所有项目缓存 💾

/*** @description 清除所有项目缓存*/
function clearCache(): void {window.localStorage.clear()window.sessionStorage.clear()const keyList = document.cookie.match(/[^ =;]+(?=\=)/g) as string[] | nullkeyList && keyList.forEach(key => (document.cookie = `${key}=0;path=/;expires=${new Date(0).toUTCString()}`))
}

按名称获取 URL 查询参数 👤

/*** @description 按名称获取 URL 查询参数* @param {string} key 需要获取的查询参数的键* @param {string} url 需要解析的链接,默认是 window.location.href* @returns {string | null} 获取到的对应于 key 的值*/
function getQueryByName(key, url = window.location.href) {const queryNameRegExp = new RegExp(`[?&]${key}=([^&]*)(?:&|$)`)const queryNameMatch = url.match(queryNameRegExp)return queryNameMatch ? decodeURIComponent(queryNameMatch[1]) : null
}

登录页面时间前缀🧵

/*** @description 登录页面的时间前缀* @returns {string} 时间前缀*/
function timeFix(): string {const time = new Date()const hour = time.getHours()return hour < 9 ? 'Good morning' : hour <= 11 ? 'Good morning' : hour <= 13 ? 'Good afternoon' : hour < 20 ? 'Good afternoon' : 'Good evening'
}

登录页面的欢迎信息 💻

/*** @description 登录页面上的欢迎信息* @returns {string} 随机欢迎信息*/
function welcome(): string {const list = ['Long time no see, I miss you so much! ', 'Wait until the stars go to sleep before I miss you', 'We are open today']return list[Math.floor(Math.random() * list.length)]
}

递归深拷贝 📋

/*** @description 对传入的数据进行深拷贝,并返回* @param {any} source 数据源* @returns {any} 复制后的数据*/
function deepClone(source: any): any {if (!source || typeof source !== 'object') return sourceif (source instanceof Date) return new Date(source)if (source instanceof RegExp) return new RegExp(source)const target = Array.isArray(source) ? ([] as Record<any, any>) : ({} as Record<any, any>)for (const key in source) target[key] = typeof source[key] === 'object' ? deepClone(source[key]) : source[key]return target
}

随机生成 UUID 📑

/*** @description 随机生成 UUID* @returns {string} 生成的 uuid*/
function getRandomUUID(): string {const tempURL = URL.createObjectURL(new Blob())const uuidStr = tempURL.toString()const separator = uuidStr.includes('/') ? '/' : ':'URL.revokeObjectURL(tempURL)return uuidStr.substring(uuidStr.lastIndexOf(separator) + 1)
}function getRandomUUID(): string {const fn = (): string => (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)return fn() + fn() + '-' + fn() + '-' + fn() + '-' + fn() + '-' + fn() + fn() + fn()
}

随机布尔值 🎲

/*** @description 随机布尔值* @returns {boolean} true | false*/
function getRandomBoolean(): boolean {return Math.random() > 0.5
}

反转字符串 🔁

/*** @description 反转字符串* @param {string} str 字符串* @returns {string} 反转后的字符串*/
function reverseString(str: string): string {return str.split('').reverse().join('')
}

随机生成十六进制颜色 🎨

/*** @description 随机生成一个十六进制格式的颜色字符串* @returns {string} 十六进制格式的颜色字符串*/
function getRandomHexColor(): string {return `#${Math.floor(Math.random() * 0xffffff).toString(16)}`
}

获取变量的真实类型 🔢

/*** @description 获取变量的真实类型* @param {any} variable 任意类型的变量* @returns {string} 变量类型*/
function getRawType(variable: any): string {return Object.prototype.toString.call(variable).split(' ')[1].replace(']', '').toLowerCase()
}

将文本复制到剪贴板 📎

/*** @description 将文本复制到剪贴板* @param {string} text 要复制的文本*/
function copyText(text: string): void {// 是否支持 navigator.clipboard 属性const isClipboardApiSupported = window.navigator && window.navigator.clipboardif (isClipboardApiSupported) {window.navigator.clipboard.writeText(text)} else {const textarea = document.createElement('textarea')textarea.readOnly = truetextarea.value = texttextarea.style.position = 'absolute'textarea.style.top = '-9999px'textarea.style.left = '-9999px'document.body.appendChild(textarea)textarea.select()document.execCommand('copy')textarea.remove()}
}

滚动到顶部 ⬆️

/*** @description 滚动到顶部*/
function scrollToTop(element: HTMLElement): void {element.scrollIntoView({ behavior: 'smooth', block: 'start' })
}

滚动到底部 ⬇️

/*** @description 滚动到底部*/
function scrollToBottom(element: HTMLElement): void {element.scrollIntoView({ behavior: 'smooth', block: 'end' })
}

对象常用方法 📚

const obj = { a: 1, b: 2, c: 3, d: 4 }
//Object.keys()
// 将返回一个数组,包含给定对象自身可枚举属性的键
Object.keys(obj) // ['a', 'b', 'c', 'd']
//Object.values()
// 返回一个数组,包含给定对象自身所有可枚举属性的值
Object.values(obj) // [1, 2, 3, 4]
//Object.entries()
// 返回一个数组,包含给定对象自身可枚举属性的键值对
Object.entries(obj) // [['a', 1], ['b', 2], ['c', 3], ['d', 4]]
//Object.fromEntries()
// 将键值对列表转换成对象,是 Object.entries() 的反向操作
Object.fromEntries( [['a', 1], ['b', 2]]) // { a: 1, b: 2 }
// hasOwnProperty()
// 返回一个布尔值,指示对象自身属性中是否具有指定的属性(即,是否具有指定的键)
obj.hasOwnProperty('a') // true
obj.hasOwnProperty('fff') // false
//Object.assign()
// 用于将一个或多个源对象的全部可枚举属性的值复制到目标对象。它将返回目标对象。
const target = { a: 1, b: 2 }
const source = { b: 4, c: 5 }
const result = Object.assign(target, source) // { ...target, ...source } 效果相同
console.log(result) // {a: 1, b: 4, c: 5}

最后,如果本文的内容对你有启发,欢迎点赞收藏关注,你的支持是我更新的动力。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149696.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式综合实验平台-嵌入式综合实训实验箱

1、基本介绍 嵌入式综合实验平台&#xff08;eeLab-BaseKit&#xff09;是中智讯公司开发的一款信息类学科的综合型实验设备&#xff0c;配套丰富的教学实验和开发例程,可以满足电子信息工程专业的专业核心课程及专业方向课程的教学、实验和实训需求&#xff0c;包括《嵌入式接…

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer&#xff0c;是一种实时…

基于单片机的精确电压表DA-AD转换

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DAC0832和ADC0832检测电压&#xff0c;0到8.5V&#xff0c;设计复位电路 LED管显示实际稳压值&#xff0c;初始电压0 二、硬件资源 基于KEIL5编写C代码&#xff0c…

regPractice-正则表达式练习

正则表达式练习(java) 1 . 校验密码强度 密码的强度必须是包含大小写字母和数字的组合&#xff0c;不能使用特殊字符&#xff0c;长度在8-10之间。 ^(?.*\d)(?.*\[a-z])(?.*[A-Z])[a-zA-Z\d]{8,10}$**(?pattern)**属于正向前瞻断言 正向前瞻断言的语法是 (?pattern)&a…

【React与Vue】如何在页签中监听 LocalStorage 变化?这些方法你都试过吗?

在开发中&#xff0c;你是否会碰到过这样的需求&#xff1a;需要监听 LocalStorage 的变化。这在不同浏览器页签间是相对简单的&#xff0c;因为浏览器提供了内置的 storage 事件。但在同一个浏览器页签下&#xff0c;却没有直接的方式实现。今天&#xff0c;我们探讨下有几种高…

化工企业如何精准网络营销

合作咨询联系竑图 hongtu201988 网络推广已成为各行各业不可或缺的一部分&#xff0c;尤其是化工企业&#xff0c;其产品的专业性和复杂性更需要通过有效的网络推广手段来触达目标客户群体。以下是一份针对化工企业的网络推广方案&#xff0c;旨在通过多渠道的营销策略&#x…

【机器学习】---元强化学习

目录 1. 元学习简介1.1 什么是元学习&#xff1f;1.2 元学习的应用 2. 强化学习基础2.1 什么是强化学习&#xff1f;2.2 强化学习的基本框架2.3 深度强化学习 3. 元强化学习的概念与工作原理3.1 元强化学习是什么&#xff1f;3.2 元强化学习与普通强化学习的区别 4. 元强化学习…

Google 提供基于AI的模糊测试框架

人工智能驱动的 OSS-Fuzz 工具可以帮助发现漏洞&#xff0c;并与自动修补管道相结合。 模糊测试可以成为找出软件中零日漏洞的宝贵工具。为了鼓励开发人员和研究人员使用它&#xff0c;谷歌周三宣布&#xff0c;免费提供其模糊测试框架OSS-Fuzz。 根据谷歌的说法&#xff0c;通…

初学51单片机之I2C总线与E2PROM

首先先推荐B站的I2C相关的视频I2C入门第一节-I2C的基本工作原理_哔哩哔哩_bilibili 看完视频估计就大概知道怎么操作I2C了&#xff0c;他的LCD1602讲的也很不错&#xff0c;把数据建立tsp和数据保持thd&#xff0c;比喻成拍照时候的摆pose和按快门两个过程&#xff0c;感觉还是…

什么是SSL证书?它能保护你的网络安全!

相信大家在浏览网页时经常会看到一些网址前面有个“小锁”图标&#xff0c;它代表的网站是安全的&#xff0c;而这背后的秘密就是SSL证书。那SSL证书到底是什么&#xff1f;它有什么用呢&#xff1f; 什么是SSL证书&#xff1f; SSL证书的全称是Secure Sockets Layer证书&…

C/C++指针的前世今生

前言 老早之前就想写这个内容了&#xff0c;打了草稿后闲置了两个月&#xff0c;因为其他事就没再动过这个东西了&#xff0c;今天翻草稿箱的时候发现了它&#xff0c;就把它完善出来&#xff0c;顺便我也学习学习。 正文 指针的前世今生 前面先说一下&#xff0c;故事是随…

Linux文件IO(十一)-复制文件描述符与截断文件

1.复制文件描述符 在 Linux 系统中&#xff0c;open 返回得到的文件描述符 fd 可以进行复制&#xff0c;复制成功之后可以得到一个新的文件描述符&#xff0c;使用新的文件描述符和旧的文件描述符都可以对文件进行 IO 操作&#xff0c;复制得到的文件描述符和旧的文件描述符拥…

想转行AI大模型开发但不知如何下手?看这篇就够了!

原创 最近有很多小伙伴问我&#xff0c;之前从事的其他领域的编程&#xff0c;现在想要学习AI大模型开发的相关技能&#xff0c;不知道从哪下手&#xff0c;应该学习些什么&#xff0c;下面四个是我认为从事大模型开发&#xff0c;必须掌握的四个开源工具&#xff0c;大家可以…

2024年模式识别与图像分析国际学术会议(PRIA 2024)

2024年模式识别与图像分析国际学术会议&#xff08;PRIA 2024&#xff09; 2024 International Conference on Pattern Recognition and Image Analysis 2024年10月18-20日 南京 三轮截稿日期&#xff1a;10月10日 2024年模式识别与图像分析国际学术会议&#xff08;PRIA 2…

流水线部署失败排查指南

在现代软件开发中&#xff0c;CI/CD&#xff08;持续集成/持续交付&#xff09;流水线是确保代码质量和快速交付的重要工具。然而&#xff0c;部署失败时&#xff0c;排查问题的能力至关重要。以下是一些常见的故障排查步骤和技巧。 ## 1. 检查流水线日志 首先&#xff0c;查看…

【JAVA-数据结构】时间空间复杂度计算案例

接着上一篇文章&#xff0c;对应举一些例子。 1.时间复杂度 【实例1】 // 计算func2的时间复杂度&#xff1f; void func2(int N) {int count 0;for (int k 0; k < 2 * N ; k) {count;} int M 10;while ((M--) > 0) {count;} System.out.println(count); } 基本操作…

什么是远程过程调用(RPC)

进程间通信(IPC) 进程间通信(Inter-Process Communication)是指两个进程或者线程之间传送数据或者信号的一些技术或者方法。进程是计算机进行资源分配的最小的单位。每个进程都有自己独立的系统资源,而且彼此之间是相对隔离的。为了使得不同的进程之间能够互相访问,相互协…

简单的mybatis batch插入批处理

简单的mybatis batch插入批处理 1.需求 公司的权限管理功能有一个岗位关联资源的分配操作&#xff0c;如果新增一个岗位&#xff0c;有时候需要将资源全部挂上去&#xff0c;原有的是for循环插入资源信息&#xff0c;发现有时候执行速度过慢&#xff0c;所以此处想修改为批处…

基于TCP协议的网络通信

TCP即传输控制协议&#xff0c;基于TCP协议的网络通信总是面向连接的&#xff0c;在通信过程中需要进行“三次握手&#xff0c;四次挥手”&#xff0c;这是众所周知的&#xff0c;所以这里不过多赘述。我们都知道TCP协议传输数据比较稳定&#xff0c;那么为什么稳定&#xff0c…