分享11 种有用的 JavaScript 技巧

今天这篇文章,我想与你分享 11个有用的JavaScript实用小技巧,它们将极大地提高你的工作效率。

1.生成随机颜色的两种方式

1).生成RandomHexColor

const generateRandomHexColor = () => {
  return `#${Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, '0')}`
}


generateRandomHexColor() // #a8277c
generateRandomHexColor() // #09c20c
generateRandomHexColor() // #dbc319

2).生成随机RGBA

const generateRandomRGBA = () => {
  const r = Math.floor(Math.random() * 256)
  const g = Math.floor(Math.random() * 256)
  const b = Math.floor(Math.random() * 256)
  const a = Math.random().toFixed(2)

  return `rgba(${[ r, g, b, a ].join(',')})`
}

generateRandomRGBA() // rgba(242,183,70,0.21)
generateRandomRGBA() // rgba(65,171,97,0.72)
generateRandomRGBA() // rgba(241,74,149,0.33)

2.复制内容到剪贴板的两种方式

方式1

const copyToClipboard = (text) => navigator.clipboard && navigator.clipboard.writeText && navigator.clipboard.writeText(text)


copyToClipboard('hello medium')

方式2

const copyToClipboard = (content) => {
  const textarea = document.createElement("textarea")

  textarea.value = content
  document.body.appendChild(textarea)
  textarea.select()
  document.execCommand("Copy")
  textarea.remove()
}


copyToClipboard('hello medium')

3. 获取URL中的查询参数

const parseQuery = (name) => {
  return new URL(window.location.href).searchParams.get(name)
}



// https://medium.com?name=fatfish&age=100
parseQuery('name') // fatfish
parseQuery('age') // 100
parseQuery('sex') // null

4.Please wait for a while

const timeout = (timeout) => new Promise((rs) => setTimeout(rs, timeout))

5.打乱数组

const shuffle = (array) => array.sort(() => 0.5 - Math.random())


shuffle([ 1, -1, 2, 3, 0, -4 ]) // [2, -1, -4, 1, 3, 0]
shuffle([ 1, -1, 2, 3, 0, -4 ]) // [3, 2, -1, -4, 0, 1]

6. 深拷贝一个对象

如何深拷贝对象?使用 StructuredClone 使其变得非常容易。

之前写过一篇相关文章可以看看:https://blog.csdn.net/weixin_42333548/article/details/135197481?spm=1001.2014.3001.5501

const obj = {
  name: 'fatfish',
  node: {
    name: 'medium',
    node: {
      name: 'blog'
    }
  }
}


const cloneObj = window.structuredClone(obj)
cloneObj.name = '1111'
cloneObj.node.name = '22222'
console.log(cloneObj)
/*
{
    "name": "1111",
    "node": {
        "name": "22222",
        "node": {
            "name": "blog"
        }
    }
}
*/
console.log(obj)
/*
{
    "name": "fatfish",
    "node": {
        "name": "medium",
        "node": {
            "name": "blog"
        }
    }
}
*/

7.确保元素在可见区域内

前段时间,我在工作中遇到了一个非常麻烦的需求,感谢IntersectionObserver,我可以轻松检测某个元素是否在可见区域内。

const isElInViewport = (el) => {
  return new Promise(function(resolve) {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach((entry) => {
        if (entry.target === el) {
          resolve(entry.isIntersecting)
        }
      })
    })
   observer.observe(el)
  })
}
const inView = await isElInViewport(document.body)
console.log(inView) // true

8.获取当前选中的文本

许多翻译网站都有此功能,你可以选择文本并将其翻译成另一个国家的语言。

const getSelectedContent = () => window.getSelection().toString()

9. 获取所有浏览器cookie

非常方便的帮助我们获取浏览器中的cookie信息


const getAllCookies = () => {
  return document.cookie.split(";").reduce(function(cookieObj, cookie) {
    const cookieParts = cookie.split("=")
    cookieObj[cookieParts[0].trim()] = cookieParts[1].trim()
    return cookieObj
  }, {})
}
getAllCookies() 
/*
{
    "_ga": "GA1.2.496117981.1644504126",
    "lightstep_guid/medium-web": "bca615c0c0287eaa",
    "tz": "-480",
    "nonce": "uNIhvQRF",
    "OUTFOX_SEARCH_USER_ID_NCOO": "989240404.2375598",
    "sz": "2560",
    "pr": "1",
    "_dd_s": "rum"
}
*/

10.删除指定名称的cookie

我的朋友,我们只能删除没有 HttpOnly 标志的 cookie。

const clearCookie = (name) => {
  document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
}
clearCookie('_ga') // _ga is removed from the cookie

11.将多维数组转换为一维数组

虽然,我们通过递归函数将多维数组转换为一维数组,但是有一个非常简单的方法可以解决这个问题。


const flatten = (array) => {
  return array.reduce((result, it) => {
    return result.concat(Array.isArray(it) ? flatten(it) : it)
  }, [])
}
const arr = [
  1,
  [
    2,
    [
      3,
      [
        4,
        [
          5,
          [
            6
          ]
        ]
      ]
    ]
  ]
]
console.log(flatten(arr)) // [1, 2, 3, 4, 5, 6]

秘诀就是使用数组的扁平化方法。

const arr = [
  1,
  [
    2,
    [
      3,
      [
        4,
        [
          5,
          [
            6
          ]
        ]
      ]
    ]
  ]
]
console.log(arr.flat(Infinity)) // [1, 2, 3, 4, 5, 6]

总结

以上就是我今天想与你分享的11个有用的技巧,希望对你有所帮助。

添加好友备注【进阶学习】拉你进技术交流群

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

keras 人工智能之VGGNet神经网络的图片识别

VGG16结构图 上期文章我们分享了如何使用VGGNet CNN网络结构搭建一个图片识别网络,以及训练了神经网络模型,利用上期训练好的神经模型,可以进行我们的图片识别 图片识别结果 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import …

关于工业环网交换机的应用知识,你了解多少?

我将与大家分享关于环网交换机的应用知识。环网交换机是一种用于环网交换的交换机设备。从它的名字来看,可以推断出它具备环形网络的功能。工业环网交换机是一种专门用于工业领域的特殊交换机。它具有冗余性和可靠性等优点。 因此,许多工业通信领域开始…

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿,我在之前那个MATS上面改一下就可以了,MAST项目:基于YOLOv8的多端车流检…

短视频矩阵系统:赋予用户创造与分享的力量

在如今快节奏的社交网络时代,人们对于信息获取和娱乐方式的需求也逐渐发生了变化。作为当下最受欢迎的短视频平台之一,抖音短视频矩阵系统正以其独特的魅力和吸引力,深深地打动着亿万用户。 抖音短视频矩阵系统是一种基于移动端的短视频分享…

【C Primer Plus第六版 学习笔记】第十四章 结构和其他数据形式

有基础,进阶用,个人查漏补缺 建立结构声明:描述该对象由什么组成,即结构布局 格式: 关键字 标记(可选){结构 }; 举例: struct book{char title[2];char author[4];float …

保护电脑安全,火绒安全助手 V5.0

火绒安全软件,也称为“火绒安全助手”是一款由中国研发的综合安全软件。火绒安全软件旨在为计算机用户提供全面的安全保护,包括防病毒、反恶意软件、网络安全、系统优化等功能。 火绒安全的功能 病毒防护:火绒提供实时的病毒和恶意软件扫描…

年度征文|回顾2023我的CSDN

一年转眼而逝,回顾这一年在csdn的创作,学习,记录历程。回顾过去,才能展望未来,首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右,增加到4000个左右。我年初的目标是粉丝…

nvm安装版本后设置默认镜像地址和nvm list available出现空白解决办法

如题 npm config get registry https://registry.npmjs.org/发现镜像地址依旧是默认的 解决 运行输入npm config list 查看这个选项对应的目录 修改为的内容如下 homehttps://npmmirror.com registryhttps://registry.npmmirror.com/或者也可以 homehttps://npmmirror.com…

【nw.js】使用nw.js将html页面打包成exe免安装程序

文章目录 一、批处理zip命令(已有可跳过此步骤)二、nw.js包三、使用批处理命令打包成exe可执行文件四、使用EnigmaVB打包成免安装可独立运行的exe文件五、结束 一、批处理zip命令(已有可跳过此步骤) 下载zip,你可以到该…

【Java并发篇】什么是多线程中的上下文切换?

多线程中的上下文切换 ✔️ 简述✔️拓展知识仓✔️减少上下文切换 ✔️ 简述 上下文切换是指 CPU 从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确地运行。 在…

嵌入式面试准备

题目都摘于网上 嵌入式系统中经常要用到无限循环,如何用C编写死循环 while(1){}或者for(;😉 内存分区 代码区,全局区(全局变量,静态变量,以及常量),栈区,堆区 const关键…

[SWPUCTF 2021 新生赛]sql

[SWPUCTF 2021 新生赛]sql wp 输入 1 正常回显: ?wllm1 返回: Want Me? Cross the Waf Your Login name:xxx Your Password:yyy输入单引号引发报错: ?wllm1 返回: Want Me? Cross the Waf You have an error in your SQL s…

指点云 宁波大带宽大存储云服务器 性能评测

指点云 浙江宁波 云服务器 性能测评,2核4G 100兆带宽 240G存储 5G防御 仅需76.8元/月;4核8G仅需112.8元/月。 官网地址:https://url.vpszj.cn/zhidianyun 优惠注册地址:https://url.vpszj.cn/zhidianyun_r 性价比高的服务器推荐…

【产品设计】零代码核心模块之三:报表

报表的用于数据和信息呈现的一种方式,能够帮助人们更直观地了解数据和信息,从而做出更明智的决策。本文从报表的价值、产品功能以及数据统计分析出发,探讨报表的重要性与使用场景,希望对你有所启发。 报表适用于需要呈现数据或信息…

Spring高手之路-Spring支持的注入方式、Spring为什么不建议使用基于字段的依赖注入

目录 Spring支持的注入方式 1.字段注入 2.构造器注入 3.setter注入 使用构造器注入存在的问题 Spring为何不建议使用基于字段的依赖注入 1.单一职责问题 2.可能产生NPE(空指针异常) 3.隐藏依赖 4.不利于测试 Spring支持的注入方式 1.字段注入 A…

k8s的二进制部署: 源码包部署-----node节点部署

服务器IP软件包k8s--master0120.0.0.61kube-aplserver,kube-controer-manager,kube-scheduler,etcdk8s--master0220.0.0.62kube-controer-manager,kube-schedulernode节点0120.0.0.62kubelet,kube-proxy,et…

【http】HTTP/1.0、HTTP/1.1和HTTP/2.0

✨ 专栏介绍 在当今互联网时代,计算机网络已经成为了人们生活和工作中不可或缺的一部分。而要实现计算机之间的通信和数据传输,就需要依靠各种网络协议来进行规范和约束。无论是浏览网页、发送电子邮件还是进行在线交流,都离不开各种各样的网…

2023年航天大事件

2023年,中国完成宇航发射近70次,是中国航天新的里程碑。中国科技工作者继续推进航天科技创新,并在运载火箭发动机研制固体燃料火箭研发、可重复航天器研发等方面取得重大突破;继续推进载人航天工程、北斗工程等中国重大航天旗舰工…

HOJ 项目部署-前端定制 默认勾选显示标签、 在线编辑器主题和字号大小修改、增加一言功能 题目AC后礼花绽放

# 项目拉取地址: https://gitee.com/himitzh0730/hoj.git # 切换到hoj-vue目录执行以下命令 #安装依赖 npm install #运行服务 npm run serve #修改代码后构建项目到dist文件夹,到服务器docker-compose.yml中修改hoj-frontend文件映射即可 npm run build…

python进阶 — Python解释器

1、Python解释器 Python解释器是一个计算机程序,它将Python代码转换为计算机可以理解的机器代码,并执行这些机器代码。 1. 这篇文章介绍如何下载和安装Python解释器: python基础(2)— 环境搭建 2 . 这篇文章介绍如…