来都来了,8个JavaScript技巧奉上

吆喝一声,如果你计算机、软件工程、电子等相关专业本科及以上学历,欢迎来共事。前后端/测试可投,技术大厂。

JavaScript 作为最流行的语言之一,其语法灵活且每年都在不断吸纳新特性,即使是一个从业多年的老手, 偶尔也会有一些被低估的 JavaScript 功能和技巧,本文将分享这些技巧,一同讨论探究。

1. 使用 flatMap

有些 JavaScript 方法尽管鲜为人知,但它们解决独特挑战的潜力能够增强编码效率, 比如 flatMap()

数组方法 flatMap() 本质上是 map()flat() 的组合,区别在于 flatMap 只能扁平1级,flat 可以指定需要扁平的级数,flatmap 比分别调用这两个方法稍微高效一些。

使用 flat + map

使用 flatmap


flatmap 尽管是一个方法,但也会有 中间数组 (指中间创建了必须进行垃圾收集的临时数组)的产生,flatMap 非常适合在需要灵活性和可读性的情况下使用。

2. 充分使用 generator

生成器 (Generator)迭代器 (iterators) 可能是 JavaScript 开发人员最不常使用的代码,其知识仅限于编码面试。(因为有更好用的语法糖 async/await ?😂)

生成器 (Generator) 是控制异步编程、生成可迭代对象和生成多个值的强大方法。生成器与传统函数不同。他们可以多次启动和停止执行。这使它们能够产生大量值并在以后继续执行,从而使它们非常适合管理异步操作、构造迭代器和处理无尽的数据流。

试想一下,假如在一个获取数据的场景下,数据库/ API 的数据量可能是无限的,而你必须将它们传输到前端,你会怎么做呢?

这种情况下, react 中最常用的方案就是无限加载方案, 如果是在 node 中或者原生JS,你该如何实现无限加载之类的功能

3. console 的妙用

console 并不只有 console.log(), 实际生产中都会使用已经封装好的log库,而 控制台对象 console 实际上内置了许多非常有用的方法,帮助您提高调试输出的质量和可读性,掌握它们能使您更轻松地 debug 和修复代码中的问题。

4. 深拷贝 structuredClone()

此前,如果开发人员想要深拷贝对象,经常需要依赖第三方库来实现或者手动实现一个神拷贝,或者采取 const cloneObj = JSON.parse(JSON.stringify(obj)); 的 hack, 但其在处理包含循环引用不符合 JSON 的数据类型(如 Map 和 Set,Blob 等 ) 的更复杂对象时,是有很多不足之处的

而现在,JavaScript 内置了一个 structuredClone() 的方法, 此方法提供了一种简单有效的方法来深度克隆对象, 且适用于大多数现代浏览器和 Node.js v17 以上


与众所周知的 JSON.parse(JSON.stringify())” 不同, structuredClone() 允许您克隆循环引用,这是目前在 JavaScript 中使用深拷贝最简单的方法。

5. 带标签的模板

带标签的模板(Tagged_Templates) - 是模板字符串(反引号)的一种更高级的形式,它允许你使用函数解析模板字面量。

这个高级特性我也是在 Next.js 14 发布后人们都在讨论的一张图才去了解的🫡,尽管这个特性是 ES6 就有的,至今已有8年!!!但我敢打赌知道这个并使用过这个特性的人屈指可数。

相信许多人已经见过下图(因为这个知识点请停止嘲笑 😝Next.js 14), 相信许多人的第一反应就是回到二十年前 PHP 时代并且代码容易遭受 sql 注入攻击 , 但实际上是安全的。这得益于模板字符串的高级特性 - ( 带标签的模板 -Tagged_Templates)

如果你不理解 Tagged_Templates 如何工作, 那么就让我用一个例子来简单说明下吧:

可以看到,Tagged Templates 的工作方式是将模板字符串里的所有字符串作为一个数组传递给函数的第一个参数,其余参数则根据相应的表达式直接插入到字符串中,Tagged Templates将 文字字符串 和表达式的结果 传递给函数,然后该函数可以以自定义方式操作并返回它们。这样开发者在构建 SQL 查询时,对输入进行适当的转义和验证,从而避免 SQL 注入攻击

带标签的模板字符串可用于很多用途,例如 安全性i18n和本地化 等。

6. 空合并运算符 ??

空合并运算符 ?? (Nullish coalescing operator) 是一个逻辑运算符,当其左侧操作数为 null 或 undefined 时,它返回其右侧操作数,否则返回其左侧操作数


这有啥值得提的?||不就行了 ?因为很多人在初学JS可能会困扰的一个问题是 假 (false)假值(falsy) 的区别, 而 ??|| 主要区别在于

  • ?? 仅当左操作数为 null 或 undefined 时?? 运算符才会将结果作为右操作数。
  • ||运算符会将左操作数的所有假值(falsy) 的结果作为右操作数

举个例子:

JS的假值判断,可以参考这个表格 JavaScript-Equality-Table/:

7. 使用Symbols作为WeakMap的键

WeakMapMap 很像,但不同点在于它的键(key) 只能是对象 Objects 和 symbol,这些键被作为弱引用存储(weakly)

为什么?因为 WeakMap 的键必须是可垃圾回收的。大多数原始数据类型可以任意创建并且没有生命周期,因此它们不能用作键, 而 对象Objectsnon-registered symbols 可以用作键,因为它们是垃圾可收集的 - MDN- WeakMap。

这个特性意味着除了键之外内存中没有其他对对象的引用,JavaScript 引擎可以在需要时对对象执行垃圾回收


好了,那 WeakMap 到底有什么作用呢?根据其特点可以联想到 WeakMap 的用途可以是自定义缓存以及检测内存泄漏

通过使用对象作为键,您可以将缓存的值与特定对象相关联。当对象被垃圾收集时,相应的 WeakMap 条目将被自动删除,立即清除缓存。

ES14 中, 使用 symbol 作为 WeakMapkey 已经成为可能, 这可以使键值对WeakMap 中扮演的角色更加清晰。因为唯一能在 WeakMap 中被作为 key 使用的原始类型只有 symbolsymbol 能保证 key 是 唯一的并且无法重新创建。

8. 函数式编程

2015 年以来,JavaScript 版本都会进行更新,今年(2023 ES14)也不例外。

ES14 最大的更新便是数组更新了许多数组方法或者为原有的数组方法增加不会带来突变(without mutation) 的互补方法。意味着它们会基于原数组创建新的数组,而不是直接修改原数组。

新增的互补方法有

  • Array.sort() -> Array.toSorted()
  • Array.splice() -> Array.toSpliced()
  • Array.reverse() -> Array.toReversed()

新增的新数组方法有:

  • Array with()
  • Array.findLast()
  • Array.findLastIndex()

今年的主题是更简单的函数式编程(fp)不变性(immutability)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-table表格变更前后根据数据值改变背景颜色

需求: 1.左侧变更前表格数据不可以编辑,并且背景色加灰 2.右侧变更后表格数据可被编辑,编辑后变更前与变更后行数据不一致,添加背景色区分 3.点击删除的时候,给变更后表格当前行,添加背景色和删除的中横…

【UML用户指南】-15-对高级结构建模-对象图

目录 1、对象图的组成 2、 对象图和类图关系 3、对对象结构建模 4、逆向工程 5、对象图构建要求 对象图对包含在类图中的事物的实例建模。 对象图显示了在某一时间点上一组对象以及它们之间的关系。 对象图用于对系统的静态设计视图或静态交互视图建模。 对某一时刻的系统…

计算机网络知识点汇总(二)

计算机网络知识点汇总 第1章计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 ​ 计算机网络是由若干个结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是就三级、集线器、交换机、或者路由器等,网络之间通过路由器进行互联&#xf…

记一次某单位的内网渗透测试

0x01 web打点 访问漏洞url:http://www.xx.xx.com进入某医疗系统 使用越权加文件上传拿到shell 0x02 内网渗透 192.168.xx.x 管理员 通过哥斯拉上线msf 上线后进行信息收集: 网卡信息、补丁信息、杀毒进程、用户在线情况、是否存在域、翻文件查找数据库密码、浏览器保存密码…

119.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与删除功能的封装

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

DNS部署与安全

一、DNS 英文全称:Domain Name Service 含义:域名服务 作用:为客户机提供域名解析服务 二、域名组成 域名组成概述 (1)如"www.sina.com.cn”是一个域名,从严格意义上讲,“sina.com.cn”…

苹果入局AI手机 iOS 18将应用AI功能

当三星、华为等国内外手机厂商都在卷着造AI手机时,智能手机大佬苹果那边确一直没什么动静。直到今年5月,距离苹果 WWDC24 全球开发者大会还有十多天时,长期关注苹果的博社记者Mark Gurman放料,iOS 18系统中将会应用一些AI功能。 从…

玩转Matlab-Simscape(初级)- 10 - 基于COMSOLSimulink 凸轮机构的控制仿真

** 玩转Matlab-Simscape(初级)- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真 ** 目录 玩转Matlab-Simscape(初级)- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真 前言一、简介二、在Solidworks中创建3D模型&#xff…

PPT可以转换成Word吗?归纳了三种转换方式

PPT可以转换成Word吗?在当今快节奏的工作和学习环境中,不同格式文件之间的转换变得日益重要。PPT作为演示文稿制作的首选工具,广泛应用于会议演讲、教育培训等多个场景,而Word则是文档编辑与编排的基石。为了便于进一步编辑、分享…

远程桌面无法连接,远程桌面连接登录没有成功

在信息技术领域,远程桌面连接作为一种便捷的管理和操作工具,对于企业和个人用户而言都具有极其重要的价值。然而,在实际使用过程中,远程桌面无法连接的问题时常出现,这不仅影响了工作效率,还可能对数据安全…

房间灰尘多怎么办?资深保洁推荐除尘最有效的空气净化器

家中的灰尘问题一直是许多人的烦恼,尤其是对尘螨过敏的人来说,灰尘简直是“心头之患”。常言道:“家有尘埃,心头有累。”每天打扫灰尘成了许多人的烦恼,尤其是对尘螨过敏的人来说,灰尘简直是“心头之患”。…

酷得智能 电子方案开发 单片机方案定制

手持小风扇电子方案开发,东莞酷得智能科技有限公司为您服务 东莞市酷得智能科技有限公司 在消费类电子市场深耕多年,依托于市场团队对市场的敏锐度、工程团队的技术积累、结合自身的创新以及和上游原厂深度合作,在2.4G通信、BLE、语音、马达…

基于TCAD与紧凑模型结合方法探究陷阱对AlGaN/GaN HEMTs功率附加效率及线性度的影响

来源:Investigation of Traps Impact on PAE and Linearity of AlGaN/GaN HEMTs Relying on a Combined TCAD–Compact Model Approach(TED 24年) 摘要 本文提出了一种新型建模方法,用于分析GaN HEMTs的微波功率性能。通过结合工…

Vue 表格动态添加行/删除行

<template><div class"elife-container"><el-row :gutter"10" class"mb8"><el-col :span"1.5"><el-button type"primary" plain size"mini" click"handleAdd">新增</…

企业微信集成策略:打破壁垒,驱动企业数字化转型

随着全球化和数字化的快速推进&#xff0c;企业如何在激烈的市场竞争中脱颖而出&#xff0c;成为每个企业家和决策者关注的焦点。腾讯推出的企业微信&#xff0c;作为一款集沟通、协作、管理于一体的企业通讯与办公工具&#xff0c;正逐步成为企业数字化转型的得力助手。NetFar…

武汉工程大学24计算机考研数据,有学硕招收调剂,而专硕不招收调剂!

武汉工程大学是一所以工为主&#xff0c;覆盖工、理、管、经、文、法、艺术、医学、教育学等九大学科门类的多科性教学研究型大学&#xff0c;是湖北省重点建设高校、湖北省国内一流学科建设高校&#xff0c;入选卓越工程师教育培养计划、中西部高校基础能力建设工程、“新工科…

spring boot接入nacos 配置中心

再接入nacos配置中心时&#xff0c;需要确认几点&#xff1a; 1. spring boot 版本 (spring boot 2.x ) 2. nacos 配置中心 服务端 版本 (1.1.4) 3. nacos client 客户端版本 (1.1.4) 方式一 1. 启动 nacos 服务端&#xff0c;这里不做解释 在配置中心中加入几个配置 2. 在…

吴恩达机器学习 第三课 week1 无监督机器学习(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 &#xff08;1&#xff09;理解异常检测算法&#xff08;Anomaly Dete…

详解工业网关在线探测功能及用途

详解工业网关在线探测功能及用途 工业网关作为工业物联网&#xff08;IIoT&#xff09;架构中的关键组件&#xff0c;扮演着桥梁的角色&#xff0c;它连接了现场的各类传感器、执行器以及更高级别的云平台或企业系统。在线探测功能是工业网关诸多能力中的一项重要特性&#xf…

2024年文化、艺术设计与社会科学国际学术会议(ICCADSS 2024)

2024年文化、艺术设计与社会科学国际学术会议&#xff08;ICCADSS 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.iccadss.com 会议地址&#xff1a;北京 收录检索&#xff1a;EI,CPCI,CNKI,Google Scholar 投稿邮箱&#xff1a;society_info163.com 投稿标题&am…