当前位置:首页 > 科技  > 软件

18 个基本 JavaScript 方法代码片段

来源: 责编: 时间:2024-06-21 17:22:41 288观看
导读在我们的日常开发过程中,我们经常使用许多常见的 JavaScript 代码片段,例如复制内容或从 URL 中检索特定参数。这些代码片段都有固定的实现,方便开发,今天我们来了解一下7个常用的代码片段。1、函数节流/** Function thro

在我们的日常开发过程中,我们经常使用许多常见的 JavaScript 代码片段,例如复制内容或从 URL 中检索特定参数。60728资讯网——每日最新资讯28at.com

60728资讯网——每日最新资讯28at.com

这些代码片段都有固定的实现,方便开发,今天我们来了解一下7个常用的代码片段。60728资讯网——每日最新资讯28at.com

1、函数节流

/** Function throttling timer version */function throttle(callback: Function, delay: number) {   let timer: number | null   return function () {     if (timer) return     const args = arguments //Use closure to save parameter array     timer = setTimeout(() => {       callback.apply(null, args)       timer = null     }, delay)   }}

2、URL 解码和编码

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

3、使用JavaScript 获取全局 CSS 变量

/** * @description Use JS to get global css variables * @param cssVariableName variable name * @returns {string} variable value*/function getCssVariableValue(cssVariableName: string): string {   return getComputedStyle(document.documentElement).getPropertyValue(cssVariableName)}

4、使用 JS 设置全局 CSS 变量

/**  * @description Set global CSS variables with JS  * @param {string} cssVariableName variable name  * @param {string} cssVariableValue variable value  */function setCssVariableValue(cssVariableName: string, cssVariableValue: string): void {   document.documentElement.style.setProperty(cssVariableName, cssVariableValue)}

5、清除所有 cookies 

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

6、清除所有项目缓存

/** * @description Clear all project caches */function clearCache(): void {  window.localStorage.clear()  window.sessionStorage.clear()  const keyList = document.cookie.match(/[^ =;]+(?=/=)/g) as string[] | null  keyList && keyList.forEach(key => (document.cookie = `${key}=0;path=/;expires=${new Date(0).toUTCString()}`))}

7、通过名称获取 URL 查询参数 

/**  * @description Get URL query parameters by name  * @param {string} key The key of the query parameter that needs to be obtained  * @param {string} url The link that needs to be parsed, the default is window.location.href  * @returns {string | null} obtained value corresponding to key  */function getQueryByName(key, url = window.location.href) {   const queryNameRegExp = new RegExp(`[?&]${key}=([^&]*)(?:&|$)`)   const queryNameMatch = url.match(queryNameRegExp)   return queryNameMatch ? decodeURIComponent(queryNameMatch[1]) : null}

8、登录页面时间前缀

/**  * @description time prefix of login page  * @returns {string} time prefix  */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'}

9、登录页面上的欢迎信息

/**  * @description Welcome message on the login page  * @returns {string} random welcome message  */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)]}

10、递归深层复制

/**  * @description Make a deep copy of the incoming data and return it  * @param {any} source data source  * @returns {any} copied data  */function deepClone(source: any): any {   if (!source || typeof source !== 'object') return source   if (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}

11、随机生成一个 UUID 

/**  * @description Randomly generate a UUID  * @returns {string} generated 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()}

12、随机布尔值

/**  * @description random boolean value  * @returns {boolean} true | false  */function getRandomBoolean(): boolean {   return Math.random() > 0.5}

13、反转字符串

/**  * @description reverse string  * @param {string} str string  * @returns {string} reversed string  */function reverseString(str: string): string {   return str.split('').reverse().join('')}

14、随机生成十六进制颜色

/**  * @description Randomly generates a color string in Hex format  * @returns {string} Color string in Hex format  */function getRandomHexColor(): string {   return `#${Math.floor(Math.random() * 0xffffff).toString(16)}`}

15、获取变量的真实类型

/**  * @description Get the real type of the variable  * @param {any} variable variable of any type  * @returns {string} variable type  */function getRawType(variable: any): string {   return Object.prototype.toString.call(variable).split(' ')[1].replace(']', '').toLowerCase()}

16、将文本复制到剪贴板

/**  * @description Copy text to clipboard  * @param {string} text The copied text  */function copyText(text: string): void {   // Whether to support navigator.clipboard attribute   const isClipboardApiSupported = window.navigator && window.navigator.clipboard   if (isClipboardApiSupported) {     window.navigator.clipboard.writeText(text)   } else {     const textarea = document.createElement('textarea')     textarea.readOnly = true     textarea.value = text     textarea.style.position = 'absolute'     textarea.style.top = '-9999px'     textarea.style.left = '-9999px'     document.body.appendChild(textarea)     textarea.select()     document.execCommand('copy')     textarea.remove()   }}

17、滚动到顶部

/**  * @description scroll to top  */function scrollToTop(element: HTMLElement): void {   element.scrollIntoView({ behavior: 'smooth', block: 'start' })}

18、对象通用方法

const obj = { a: 1, b: 2, c: 3, d: 4 }//Object.keys()// Will return an array consisting of the given object's own enumerable propertiesObject.keys(obj) // ['a', 'b', 'c', 'd']//Object.values()// Returns an array of all enumerable property values of the given object itselfObject.values(obj) // [1, 2, 3, 4]//Object.entries()// Returns an array of key-value pairs for the given object's own enumerable propertiesObject.entries(obj) // [['a', 1], ['b', 2], ['c', 3], ['d', 4]]//Object.fromEntries()//Convert the list of key-value pairs into an object, which is the reverse operation of Object.entries()Object.fromEntries( [['a', 1], ['b', 2]]) // { a: 1, b: 2 }// hasOwnProperty()// Returns a Boolean value indicating whether the object has the specified attribute in its own properties (that is, whether it has the specified key)obj.hasOwnProperty('a') // trueobj.hasOwnProperty('fff') // false//Object.assign()// Used to copy the values of all enumerable properties from one or more source objects to the target object. It will return the target object.const target = { a: 1, b: 2 }const source = { b: 4, c: 5 }const result = Object.assign(target, source) // { ...target, ...source } has the same effectconsole.log(result) // {a: 1, b: 4, c: 5}

总结

以上就是我今天想与你分享的全部内容,希望这些内容对你有所帮助。60728资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95546-0.html18 个基本 JavaScript 方法代码片段

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 盘点JavaScript focus/blur(聚焦)实际应用

下一篇: Python十个常用的自动化脚本

标签:
  • 热门焦点
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top