JavaScript黑科技:简洁有用的一行代码,让你的开发效率飙升!

简介: JavaScript黑科技:简洁有用的一行代码,让你的开发效率飙升!

说在前面

在这篇技术博客中,我们将向你介绍一些令人惊叹的JavaScript黑科技,这些只需一行代码就能实现的简洁而有用的功能,将极大地提升你的开发效率。无论是优化代码、增加交互性,还是实现复杂的逻辑,这些代码片段将成为你工具箱中的宝贵资源。跟随本文,让我们一起领略这些酷炫的JavaScript技巧吧!

代码

1、生成指定范围内的随机整数

const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;

该函数接受两个参数 minmax,并返回一个介于 minmax 之间的随机整数。

这个函数使用 Math.random() 方法生成一个0到1之间的随机小数,然后将其乘以 (max - min + 1),这将产生一个在 0max - min + 1 范围内的随机数。

接下来,通过使用 Math.floor() 向下取整,将这个随机数转换为整数。最后,将 min 添加到结果中,以确保生成的随机数在 minmax 之间。

2、打印 JSON 对象为格式化的 JSON 字符串

JSON.stringify(obj, null, 2);

JSON.stringify(obj, null, 2) 是一个用于将 JavaScript 对象转换为格式化的 JSON 字符串的函数调用,其中 obj 是要转换的 JavaScript 对象。

在这个函数调用中,第二个参数 null 表示在转换过程中不使用任何替换函数,而第三个参数 2 表示在输出的 JSON 字符串中使用两个空格缩进。

以下是一个示例,展示了如何使用 JSON.stringify 将 JavaScript 对象转换为格式化的 JSON 字符串:

const obj = {
  name: "zhangsan",
  age: 30,
};
const jsonString = JSON.stringify(obj, null, 2);
console.log(jsonString);

假设 obj 是上述示例中定义的对象,JSON.stringify(obj, null, 2) 将会返回以下格式化的 JSON 字符串:

这样的格式化输出更易于阅读,并且每个属性都会独占一行,配合了两个空格的缩进。

3、生成随机密钥

const cryptoKey = () => crypto.getRandomValues(new Uint32Array(1))[0].toString(16);

使用 crypto.getRandomValues() 方法生成一个随机的 32 位无符号整数,并将其转换为 16 进制字符串。

在这个函数中,new Uint32Array(1) 创建了一个包含一个元素的无符号 32 位整数数组。然后,crypto.getRandomValues() 方法将随机值填充到该数组中,并返回这个数组。接下来,通过索引访问数组中的第一个元素,并使用 toString(16) 将其转换为一个 16 进制字符串。

4、检查元素是否在视窗中

const elementInViewport = el => el.getBoundingClientRect().top >= 0 && el.getBoundingClientRect().bottom <= window.innerHeight;

该函数接受一个参数 el,表示要检查的元素。在函数内部,使用 getBoundingClientRect() 方法获取到 el 元素的位置信息,然后通过比较 topbottom 属性来判断元素是否在当前视口中可见。

具体来说,el.getBoundingClientRect().top >= 0 表示元素顶部是否在或者超出视口顶部,而 el.getBoundingClientRect().bottom <= window.innerHeight 表示元素底部是否在或者超出视口底部。

如果上述两个条件都满足,则说明元素完全在当前视口中可见,函数将返回 true,否则将返回 false

以下是使用 elementInViewport 函数检查元素是否在视口中可见的示例:

const element = document.getElementById('myElement');
if (elementInViewport(element)) {
  console.log('Element is in the viewport');
} else {
  console.log('Element is not in the viewport');
}

5、获取设备类型

const getDeviceType = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop';

使用了正则表达式 /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 来检查用户代理字符串中是否包含移动设备的关键词。如果匹配成功,则返回 ‘Mobile’,否则返回 ‘Desktop’。

此正则表达式会检查 navigator.userAgent 中是否包含 Android、webOS、iPhone、iPad、iPod、BlackBerry、IEMobile 或 Opera Mini 这些关键词,如果包含其中任何一个,则判定为移动设备,否则判定为桌面设备。

以下是使用 getDeviceType 函数获取设备类型的示例:

const deviceType = getDeviceType();
console.log('Device type: ' + deviceType); // 输出设备类型

在浏览器环境中执行上述代码,将根据用户代理字符串判断设备类型,并输出 ‘Mobile’ 或 ‘Desktop’。

需要注意的是,用户代理字符串可能会被用户修改或者浏览器插件所影响,因此这种方式判断设备类型并不是十分准确,但在一般情况下可以提供一个大致的判断。

6、扁平化数组

const flatten = arr => arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);

使用了 JavaScript 中的 reduce 方法来遍历数组,并根据数组元素的类型进行相应的处理。如果当前元素是一个数组,则递归调用 flatten 函数对其进行扁平化处理;否则直接将当前元素添加到累积结果中。

具体来说,arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []) 中的 reduce 方法对数组 arr 进行迭代,初始值为一个空数组 []。在每次迭代中,对当前元素 val 进行判断,如果是数组,则递归调用 flatten 函数,否则将其直接添加到累积结果数组 acc 中。

最终得到的累积结果就是将多维数组扁平化后的一维数组。

以下是使用 flatten 函数将多维数组扁平化的示例:

const nestedArray = [1, 2, [3, 4, [5, 6], 7], 8, [9]];
const flatArray = flatten(nestedArray);
console.log(flatArray); // 输出扁平化后的一维数组

在上述示例中,nestedArray 是一个嵌套的数组,经过 flatten 函数处理后,将得到一个扁平化的一维数组。

需要注意的是,JavaScript 中也提供了 flatMap 方法可以用于类似的扁平化操作,但是在处理多维数组时可能会有区别。

7、打乱数组

const shuffleArray = arr => arr.sort(() => 0.5 - Math.random());

使用了 sort 方法,传入一个比较函数 () => 0.5 - Math.random()。这个比较函数的作用是返回一个随机数,负数或正数的概率相等,从而实现对数组的随机排序。

在每次排序时,sort 方法会调用比较函数来决定元素的顺序,由于比较函数中使用了随机数,因此每次排序的结果都是随机的,从而实现了数组的随机排序(洗牌)。

以下是使用 shuffleArray 函数对数组进行随机排序的示例:

const myArray = [1, 2, 3, 4, 5];
shuffleArray(myArray);
console.log(myArray); // 输出随机排序后的数组

在上述示例中,myArray 是一个包含数字的数组,经过 shuffleArray 函数处理后,将得到一个随机排序的数组。

需要注意的是,这种方法虽然简单,但并不是一种严格意义上的均匀随机分布,如果要求高质量的随机性,建议使用专门的随机算法库来进行处理。

8、将小驼峰字符串转换为连接符(连字符)连接的字符串

const camelToDash = str => str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();

使用了正则表达式 /([a-z])([A-Z])/g 来匹配小驼峰字符串中的大写字母前的小写字母。然后使用 replace 方法将匹配到的子串替换为 $1-$2,其中 $1 表示第一个捕获组(即小写字母),$2 表示第二个捕获组(即大写字母)。最后使用 toLowerCase 方法将结果转换为全小写。

以下是使用 camelToDash 函数将小驼峰字符串转换为连接符连接的字符串的示例:

const myString = 'helloWorld;iLoveCode';
const dashedString = camelToDash(myString);
console.log(dashedString); // 输出转换后的连接符连接的字符串

9、将连接符(连字符)连接的字符串转换为小驼峰字符串

const dashToCamel = str => str.replace(/-([a-z])/g, (match, group) => group.toUpperCase());

使用了正则表达式 /-([a-z])/g 来匹配连字符后的小写字母。然后使用 replace 方法,第二个参数传入一个函数,对匹配到的子串进行处理,将匹配到的小写字母转换为大写字母。最终返回转换后的小驼峰字符串。

以下是使用 dashToCamel 函数将连接符连接的字符串转换为小驼峰字符串的示例:

const myString = 'hello-world;i-love-code';
const camelString = dashToCamel(myString);
console.log(camelString); // 输出转换后的小驼峰字符串

10、快速交换多个变量的值

[a,b,c] = [c,a,b]

执行这个表达式时,会将原数组中的第一个元素赋给 c,第二个元素赋给 a,第三个元素赋给 b,从而实现了位置交换。

举个例子,如果原数组是 [1, 2, 3],执行 [a,b,c] = [c,a,b] 后,会得到:

  • a = 3
  • b = 1
  • c = 2

这样,数组元素的位置就被成功交换了。这种使用解构赋值来实现元素位置交换的方式非常简洁和优雅,是 JavaScript 中常用的技巧之一。

公众号

关注公众号『前端也能这么有趣』,获取更多新鲜内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
3天前
|
监控 JavaScript 前端开发
使用Vue.js开发员工上网行为监控的实时数据展示页面
使用Vue.js开发的实时员工上网行为监控页面,展示员工访问的网站、应用和时间等数据。页面响应式设计,适应不同设备。通过Vue组件显示实时数据,如`&lt;li v-for=&quot;activity in activities&quot;&gt;`循环渲染。数据定时更新,利用Vue的生命周期钩子和axios从服务器获取并自动刷新,确保数据的时效性。该页面有助于管理者即时了解员工网络活动,保障企业网络安全和资源管理。
23 5
|
12天前
|
JavaScript 前端开发 Serverless
Vue.js的介绍、原理、用法、经典案例代码以及注意事项
Vue.js的介绍、原理、用法、经典案例代码以及注意事项
27 2
|
3天前
|
JavaScript 前端开发 编译器
探讨TypeScript如何帮助JavaScript开发者避免这些常见错误,从而提高代码质量和开发效率
【6月更文挑战第13天】TypeScript,JavaScript的超集,通过添加静态类型检查和面向对象特性,帮助开发者避免常见错误,提升代码质量和开发效率。它能检测类型错误,防止运行时类型转变引发的问题;使用可选链和空值合并避免引用错误;通过枚举减少逻辑错误中的魔法数字;接口和泛型等特性提高代码可维护性。学习TypeScript对提升JavaScript开发质量有显著效果。
9 4
|
3天前
|
JavaScript UED
ab77b6ea7f3fbf79.JS代码报错什么原因?
网站出现JS报错,表现为黄色小叹号,经排查发现是360自动收录JS引起。这不仅导致页面延迟增加,还影响用户体验。解决方案是删除360的自动推送JS代码。
9 1
|
9天前
|
JavaScript 前端开发 安全
80 行 JS 代码实现页面添加水印:文字水印、多行文字水印、图片水印、文字&图片水印
80 行 JS 代码实现页面添加水印:文字水印、多行文字水印、图片水印、文字&图片水印 1. 信息标识: 水印可以用于标识文档的所有者、保密级别、状态或其他相关信息,帮助用户更好地理解文档内容的属性。 2. 版权保护: 在文档中添加水印可以帮助保护内容的版权,防止他人未经授权地复制、转载或篡改内容。 3. 安全保护: 对于敏感信息或机密文档,添加水印可以帮助防止信息泄露,提高文档的安全性。 4. 提升专业性: 在一些场景下,如商业报告、合同文件等,添加水印可以增加文档的专业性和正式性。 5. 防止截屏或拷贝: 在网页中添加水印可以防止用户通过截屏或复制粘贴等方式非法获取文档内容。
15 1
80 行 JS 代码实现页面添加水印:文字水印、多行文字水印、图片水印、文字&图片水印
|
10天前
|
前端开发 JavaScript 搜索推荐
[初学者必看]JavaScript 15题简单小例子练习,锻炼代码逻辑思维
【6月更文挑战第3天】这是一个JavaScript编程练习集,包含15个题目及答案:计算两数之和、判断偶数、找数组最大值、字符串反转、回文检测、斐波那契数列、数组去重、冒泡排序、阶乘计算、数组元素检查、数组求和、字符计数、数组最值和质数判断以及数组扁平化。每个题目都有相应的代码实现示例。
11 1
|
10天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的二手交易平台设计与开发附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的二手交易平台设计与开发附带文章和源代码部署视频讲解等
17 0
|
10天前
|
存储 前端开发 JavaScript
[初学者必看]JavaScript 简单实际案例练习,锻炼代码逻辑思维
【6月更文挑战第2天】这是一个前端小项目合集,包括图片轮播器、动态列表、模态框、表单验证等14个项目,旨在帮助初学者提升编码技能和实战经验。每个项目提供关键提示,如使用HTML、CSS和JavaScript实现不同功能,如事件监听、动画效果和数据处理。通过这些项目,学习者可以锻炼前端基础并增强实际操作能力。
14 2
|
11天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的文化遗产的保护与旅游开发附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的文化遗产的保护与旅游开发附带文章和源代码部署视频讲解等
12 1
|
13天前
|
前端开发 JavaScript 开发者
JavaScript异步编程艺术:深入浅出回调函数与异步挑战【含代码示例】
本文深入解析JavaScript异步编程,重点探讨回调函数和异步挑战。在单线程的JavaScript中,异步编程至关重要,回调函数是其基础。然而,回调地狱问题催生了Promise和async/await的出现。文章提供代码示例展示Promise和async/await的使用,并分享异步编程最佳实践,包括错误处理、资源管理和性能优化。遇到问题时,建议通过明确异步流程、逐步调试和异常捕获来解决。最后,文章强调异步编程的未来发展,鼓励开发者掌握最新工具并探讨更高效的异步解决方案。
17 2