ES6的一些高级技巧

✨ 专栏介绍

在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景,并且不断发展演进。在本专栏中,我们将深入学习JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。让我们一起开始JavaScript之旅吧!

在这里插入图片描述

文章目录

    • ✨ 专栏介绍
    • 引言
    • 1. Object.entries()和Object.fromEntries()
    • 2. Symbol类型和Symbol属性
    • 3. WeakMap和WeakSet
    • 4. Promise.allSettled()
    • 5. BigInt
    • 6. Array.of、Array.from
    • 7. .at和flat
    • 总结
    • 😶 写在结尾
        • `前端设计模式专栏`
        • `Vue专栏`
        • `JavaScript(ES6)专栏`


在这里插入图片描述

引言

ES6(ECMAScript 2015)引入了许多新的功能和语法,其中一些功能可能相对较冷门,但非常实用。本文将介绍一些这样的高级技巧,包括

  • Object.entries()

  • Object.fromEntries()

  • Symbol类型和Symbol属性

  • WeakMap和WeakSet

  • Promise.allSettled()

  • BigInt

  • Array.of

  • Array.from

  • .at和flat

1. Object.entries()和Object.fromEntries()

  • Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组。
  • Object.fromEntries()方法将键值对列表转换为一个对象。

当使用Object.entries()时,可以传入一个对象作为参数。这个对象可以是任何具有可枚举属性的对象。例如:

const obj = { a: 1, b: 2, c: 3 };const entries = Object.entries(obj);
console.log(entries); // [["a", 1], ["b", 2], ["c", 3]]

在这个例子中,我们将一个包含三个属性的对象传递给Object.entries()方法,并将返回的结果存储在entries变量中。entries变量现在是一个包含键值对数组的数组。

同样地,当使用Object.fromEntries()时,可以传入一个键值对数组作为参数。这个数组中的每个元素都是一个包含键和值的数组。例如:

const entries = [["a", 1], ["b", 2], ["c", 3]];const obj = Object.fromEntries(entries);
console.log(obj); // { a: 1, b: 2, c: 3 }

在这个例子中,我们将一个包含三个键值对的数组传递给Object.fromEntries()方法,并将返回的结果存储在obj变量中。obj变量现在是一个由键值对组成的对象。

2. Symbol类型和Symbol属性

  • Symbol是一种新的原始数据类型,用于创建唯一的标识符。

  • Symbol属性是对象中使用Symbol作为键创建的属性。

    const sym = Symbol('description');const obj = {[sym]: 'value'
    };console.log(obj[sym]); // value
    

3. WeakMap和WeakSet

  • WeakMap是一种集合类型,其中键必须是对象,并且在没有其他引用时会被垃圾回收。

  • WeakSet是一种集合类型,其中元素必须是对象,并且在没有其他引用时会被垃圾回收。

    const wm = new WeakMap();const obj = {};wm.set(obj, 'value');console.log(wm.get(obj)); // valueconst ws = new WeakSet();ws.add(obj);console.log(ws.has(obj)); // true
    

    在这个例子中,我们创建了一个WeakMap和一个WeakSet实例。我们使用set()方法将obj对象添加到WeakMap中,并将值设置为’value’。然后,我们使用get()方法从WeakMap中获取值。类似地,我们使用add()方法将obj对象添加到WeakSet中,并使用has()方法检查集合中是否存在该对象。

4. Promise.allSettled()

  • Promise.allSettled()方法返回一个在所有给定的promise已被解析或被拒绝后决议的promise,并带有一个对象数组,每个对象表示对应的promise结果。
const promises = [Promise.resolve('resolved'),Promise.reject('rejected'),Promise.resolve('resolved')
];Promise.allSettled(promises).then(results => {console.log(results);}).catch(error => {console.error(error);});// 输出结果:// [//  { status: 'fulfilled', value: 'resolved' },//  { status: 'rejected', reason: 'rejected' },//  { status: 'fulfilled', value: 'resolved' }// ]

我们创建了一个包含三个promise的数组,并将其传递给Promise.allSettled()方法。然后,我们使用.then()方法处理返回的结果数组,或使用.catch()方法处理任何错误。

5. BigInt

  • BigInt是一种新的原始数据类型,用于表示任意精度的整数。
 const bigIntValue = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1);console.log(bigIntValue); // 9007199254740992n

6. Array.of、Array.from

  • Array.of()方法创建一个具有可变数量参数的新数组实例。

  • Array.of方法用于创建一个由参数组成的新数组。它与Array构造函数不同之处在于,当参数只有一个且为数字时,Array.of会创建一个只包含该数字的数组,而不是创建指定长度的空数组。

  • Array.from()方法从类似数组或可迭代对象创建一个新的数组实例。

  • Array.from方法将类似数组或可迭代对象转换为真正的数组。它可以接收第二个参数来进行映射或筛选操作。

const arr1 = Array.of(1, 2, 3);
console.log(arr1); // [1, 2, 3]const str = 'Hello';
const arr = Array.from(str);
console.log(arr); // 输出: ['H', 'e', 'l', 'l', 'o']const nums = [1, 2, 3, 4, 5];
const doubled = Array.from(nums, num => num * 2);
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

7. .at和flat

  • .at()方法返回指定索引处的元素。

  • .at方法用于获取数组指定索引位置的元素,支持负数索引。

  • flat()方法将嵌套的数组扁平化为一个新的数组。

  • flat方法用于将多维数组扁平化为一维数组,可以指定扁平化的层数。

 const arr3 = [1, 2, 3, 4, 5];console.log(arr3.at(2)); // 3const arr4 = [1, [2, [3]]];console.log(arr4.flat()); // [1, 2, [3]]

总结

ES6引入了许多实用但相对较冷门的高级技巧。Object.entries()Object.fromEntries()可以方便地在对象和键值对之间进行转换。Symbol类型和Symbol属性可以创建唯一的标识符。WeakMapWeakSet提供了一种在没有其他引用时自动垃圾回收的集合类型。Promise.allSettled()可以处理多个promise并返回所有结果。BigInt允许表示任意精度的整数。Array.ofArray.from.atflat提供了更方便的数组操作方法。这些技巧可以帮助开发者更高效地编写代码。


😶 写在结尾

前端设计模式专栏

在这里插入图片描述
设计模式是软件开发中不可或缺的一部分,它们帮助我们解决了许多常见问题,并提供了一种优雅而可靠的方式来构建应用程序。在本专栏中,我们介绍了所有的前端设计模式,包括观察者模式、单例模式、策略模式等等。通过学习这些设计模式,并将其应用于实际项目中,我们可以提高代码的可维护性、可扩展性和可重用性。希望这个专栏能够帮助你在前端开发中更好地应用设计模式,写出高质量的代码。点击订阅前端设计模式专栏

Vue专栏

在这里插入图片描述

Vue.js是一款流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)的架构模式,通过数据驱动和组件化的方式,使开发者能够更轻松地构建交互性强、可复用的Web应用程序。在这个专栏中,我们将深入探讨Vue.js的核心概念、组件开发、状态管理、路由和性能优化等方面的知识。我们将学习如何使用Vue.js构建响应式的用户界面,并探索其强大的生态系统,如Vue Router和Vuex、Pinia。通过学习这些内容,你将能够成为一名熟练的Vue.js开发者,并能够应用这些知识来构建复杂而高效的Web应用程序。点击订阅Vue专栏

JavaScript(ES6)专栏

在这里插入图片描述

JavaScript是一种广泛应用于网页开发和后端开发的脚本语言。它具有动态性、灵活性和易学性的特点,是构建现代Web应用程序的重要工具之一。在这个专栏中,我们将深入探讨JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6(ECMAScript 2015)及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。点击订阅JavaScript(ES6)专栏

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

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

相关文章

JAVA版鸿鹄云商B2B2C:解析多商家入驻直播带货商城系统的实现与应用

一、技术选型 java开发语言:java是一种跨平台的编程语言,适用于大型企业级应用开发。使用java开发直播商城可以保证系统的稳定性和可扩展性。 spring boot框架:spring boot是一个快速构建spring应用的框架,简化了开发过程&#xf…

点积相似性(Dot Product Similarity)

点积相似性(Dot Product Similarity)是一种计算两个向量之间相似性的方法。对于两个向量 a 和 b,它们的点积相似性定义为它们对应元素的乘积之和 其中,和 分别表示向量 和 的第 个元素, 是向量的长度。点积相似性的计…

独立容器 Rancher Server 证书过期解决

问题 Rancher无法登录 容器报错X509:certificate has expired or is not ye valid 在某天需要发布新版本的时候,发现rancher无法登录,于是到服务器上查看rancher日志,发现以下内容: docker logs -f rancher --since10…

性能测试之脚本、工具、结果分析总结

1、脚本模板 2、 场景模板 性能测试工具选择 1. 数据建模工具 DataFactory是一种强大的数据产生器,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle 、 Sybase、SQL Server数据库,支持ODBC连接方式&#xff0c…

matlab列优先与高维矩阵重构

由于matlab在列化a(:)以及reshape(a)等操作中是列优先的,所以要重构出新的高维度矩阵,通常要把reshape和permute结合起来使用。 先到 http://caffe.berkeleyvision.org/ 下载 训练好的model bvlc_reference_caffenet.caffemodel; 更多caffe使用也请参看…

泰迪智能科技“供需对接就业育人项目”介绍

为帮助用人单位培养和招聘更多实用型、复合型和紧缺型人才,推动高校人才培养与就业有机联动、人才供需有效对接促进高校毕业生更加充分更高质量就业,经广东泰迪智能科技股份有限公司申报、全国高校毕业生就业创业指导委员会专家组审核,泰迪智能科技“供需…

适合当代年轻人做的副业分享,可以长期发展

年轻人精力旺盛,学习能力强,有创新,且处于不断上升阶段,所以副业要选择能成长,长期可靠的,既可以赚钱,又可以提升自己,一举两得! 而在这其中,有一些副业活动不…

python3处理docx并flask显示

前言: 最近有需求处理docx文件,并讲内容显示到页面,对world进行在线的阅读,这样我这里就使用flaskDocument对docx文件进行处理并显示,下面直接上代码: Document处理: 首先下载Document的库文…

kubeadm 快速搭建

二进制搭建适合大集群,50台以上的主机 kubeadm更适合中下企业的业务集群。 master docker kubelet bubeadm kubectl flannel node1 docker kubelet bubeadm kubectl flannel node2 docker kubelet bubeadm kubectl flannel harbor节点:docker docker…

排列组合算法(升级版)

前言 在上一期博客中我们分享了一般的排列组合算法(没看的话点这里哦~),但是缺点很明显,没法进行取模运算,而且计算的范围十分有限,而今天分享的排列组合升级版算法能够轻松解决这些问题,话不多…

【汇编笔记】初识汇编-内存读写

汇编语言的由来: CPU是计算机的核心,由于计算机只认识二进制,所以CPU执行的指令是二进制。 我们要想让CPU工作,就得给他提供它认识的指令,这一系列的指令的集合,称之为指令集。 指令集: 不同的体…

2023/12/3 今日得先看的重磅AI新闻

📱 传 iPhone 设计主管加盟苹果前首席设计师公司,与 OpenAI 合作开发 AI 设备 🚗 雷军宣布:小米澎湃 OS 启动新标识,「人车家全生态」正式闭环 🔧 OpenAI 竞争对手 Anthropic 预计明年年化营收将达到 8.5…

教育行业:真正有头脑的人,都在用这个巡课技术!

随着教育技术的迅猛发展,学校管理面临着日益复杂的挑战。在线巡课系统作为一种强大的工具,为学校管理者提供了更高效、精准的管理手段。 客户案例 中学巡课项目 河南某中学引入了泛地缘科技推出的在线巡课系统,实现了对教学过程的全面监管。…

[大厂实践] DoorDash基于eBPF的监控实践

eBPF是监控云原生应用的强大工具,本文介绍了DoorDash构建基于eBPF的监控系统的实践。原文: BPFAgent: eBPF for Monitoring at DoorDash 随着DoorDash在过去几年中经历了快速增长,我们开始看到传统监控方法的局限性。度量、日志和跟踪提供了服务生态系统…

数据结构第0章 初识

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图1、数据结构1)数据结构是什么&am…

Flink1.17实战教程(第六篇:容错机制)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

python的二分查找库bisect,可用于简化繁琐的if条件分支

if条件分支的函数 之前实现了一个函数功能&#xff0c;大意是根据不同的时间天数&#xff0c;返回不同的值。 def analyse_value(days_num:int):if days_num 1:value RD1delif days_num > 1 and days_num < 7:value RD7delif days_num > 7 and days_num < 14:…

C++智能指针的简单实现,原理及应用

1. 为什么C引入了智能指针&#xff1f; 在C中&#xff0c;引入智能指针主要是为了解决原始指针在使用过程中可能出现的内存泄漏问题。内存泄漏是程序在申请内存后&#xff0c;无法释放已分配的内存&#xff0c;导致内存被无效占用&#xff0c;严重时可能导致系统运行缓慢甚至崩…

Redis6.0 Client-Side缓存是什么

前言 Redis在其6.0版本中加入了Client-side caching的支持&#xff0c;开启该功能后&#xff0c;Redis可以将指定的key-value缓存在客户端侧&#xff0c;这样当客户端发起请求时&#xff0c;如果客户端侧存在缓存&#xff0c;则无需请求Redis Server端。 Why Client-side Cac…

【每日一题】【12.24】 - 【12.28】

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 本周总结&#xff1a;本周的每日一题比较针对于数学问题的一个应用&#xff0c;如二元一次方程组的求解或者数组求和&#xff0c;同…