【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析

在这里插入图片描述

🔥 个人主页:空白诗
🔥 热门专栏:【JavaScript】

在这里插入图片描述

文章目录

    • 🌿 引言
    • 五、 Destructuring Assignment - 解构赋值,数据提取的艺术 🎨
      • 📌 数组解构
      • 📌 对象解构
      • 📌 特殊用法与技巧
      • 📌 小结
    • 六、 Spread and Rest Operators - 扩展与收集,数组操作新境界 🌀
      • 📌 扩展运算符
      • 📌 剩余参数
      • 📌 高级用法与技巧
      • 📌 小结
    • 七、 Class类 - 面向对象编程,正式登场 👑
      • 📌 构造函数与实例化
      • 📌 方法
      • 📌 Getter 和 Setter
      • 📌 继承
      • 📌 静态方法和属性
    • 总结

在这里插入图片描述

🌿 引言

ES6,作为ECMAScript 2015的简称,标志着JavaScript编程语言的一个重要进化节点。它不是渐进的变化,而是一次飞跃式的更新,为开发者带来了一系列强大的新特性与语法糖,极大提升了代码的简洁性、可读性和运行效率。从新的变量声明方式letconst,到优雅的箭头函数模板字符串,再到让对象操作更为灵活的解构赋值增强的对象字面量ES6的每项改进都旨在让JavaScript适应日益复杂的应用场景,同时保持其作为脚本语言的活力与魅力。本文是深入探索这些核心特性的起点,为你铺开一条通向高效、现代JavaScript编程实践的道路。

继上文👉🏻 【JavaScript】ECMAS6(ES6)新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析 后,我们将继续深入探讨ECMAS6的其他关键特性,涵盖解构赋值、扩展与收集、面向对象编程的Class体系,进一步加深对现代JavaScript编程的理解与应用能力。


五、 Destructuring Assignment - 解构赋值,数据提取的艺术 🎨

解构赋值作为ES6引入的一项强大特性,彻底革新了数据访问与赋值的方式,使得从数组或对象中提取数据变得既直观又高效。这项技术不仅简化了代码,还大大增强了JavaScript的表达能力。

📌 数组解构

数组解构允许你将数组中的元素直接赋值给不同变量。你可以解构任意长度的数组,甚至忽略某些值或使用默认值。

const [first, , third, fourth = "default"] = [1, 2, 3, 4];
console.log(first, third, fourth); // 输出:1 3 4
// 注意:第二个元素被忽略,第四个元素使用了默认值

📌 对象解构

对象解构则让你能够将对象的属性值直接绑定到变量上,匹配属性名即可。这在处理API响应或配置对象时尤为有用。

const {a, b: aliasForB, c = "defaultValue"} = {a: 5, b: 6};
console.log(a, aliasForB, c); // 输出:5 6 defaultValue
// 注意:`b`属性值被赋给了新命名的变量`aliasForB`,`c`使用了默认值

📌 特殊用法与技巧

  • 交换变量值:无需临时变量,直接交换两个变量的值。

    let x = 1, y = 2;
    [x, y] = [y, x];
    console.log(x, y); // 输出:2 1
    
  • 默认值与解构:为了解构时避免undefined,可以为解构的变量设置默认值。

    function fetchUserData({id = 0, name = "Guest", email}) {console.log(id, name, email);
    }fetchUserData({id: 123}); // 输出:123 Guest undefined
    
  • 嵌套解构:对于嵌套结构,可以连续使用解构表达式。

    const nestedObj = {data: {val1: 1, val2: 2}};
    const {data: {val1, val2}} = nestedObj;
    console.log(val1, val2); // 输出:1 2
    

📌 小结

解构赋值是JavaScript中一种高级且实用的数据操作方式,它简化了数据处理逻辑,提升了代码的可读性和简洁性。无论是处理数组、对象还是更复杂的嵌套结构,解构赋值都展现了其“数据提取艺术”的魅力,是现代JavaScript编程不可或缺的一部分。掌握并灵活运用解构赋值,将使你的编码之旅更加优雅与高效。


六、 Spread and Rest Operators - 扩展与收集,数组操作新境界 🌀

扩展运算符(...)与剩余参数(...)是JavaScript ES6引入的两项强大特性,它们彻底改变了数组处理与函数参数的灵活性,为开发者提供了更加高效与优雅的工具。

📌 扩展运算符

扩展运算符允许你将数组或可迭代对象(如数组、Set、Map)的内容“展开”到另一个数组或作为函数的参数列表中,实现数组合并或克隆取值等操作。

// 数组合数组
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const combined = [...arr1, ...arr2];
console.log(combined); // 输出:[1, 2, 3, 4, 5]// 函数参数展开
function multiply(a, b, c) {return a * b * c;
}
const numbers = [2, 3];
console.log(multiply(...numbers, 4)); // 输出:24

📌 剩余参数

剩余参数则是形参的一种特殊形式,使用三个点...标识,用于收集函数调用时多余的参数到一个数组中,非常适合不确定参数数量的场景。

function sum(...numbers) {// 使用reduce方法累加数组中的所有元素return numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
}
console.log(sum(1, 2, 3, 4)); // 10

📌 高级用法与技巧

  • 对象复制与合并:扩展运算符可以用于浅复制对象或合并多个对象。

    const obj1 = {a: 1};
    const obj2 = {b: 2};
    const merged = {...obj1, ...obj2}; // 输出:{a: 1, b: 2}
    
  • 解构与剩余:在解构赋值中结合剩余参数,可以收集解构未明确列出的属性。

    const {a, ...rest} = {a: 1, b: 2, c: 3};
    console.log(rest); // 输出:{b: 2, c: 3}
    

📌 小结

扩展运算符与剩余参数不仅简化了数组操作和函数参数处理,还为JavaScript代码带来了更高的灵活性和表达力。通过它们,你可以轻松地合并数组、复制对象、收集不定参数,甚至实现复杂的逻辑,这些都是现代JavaScript开发不可或缺的技能。掌握这两项特性,你的代码将更加高效且易于维护。


七、 Class类 - 面向对象编程,正式登场 👑

ES6 引入了 class 关键字,标志着JavaScript正式拥抱了面向对象编程(OOP)的设计模式,使得定义和继承类变得更加直观和规范。尽管JavaScript本质上仍基于原型继承,但class语法提供了一个熟悉且易于理解的接口,让习惯于Java、C#等语言的开发者能更快上手。

这里只做一些简单介绍,更多关于 class 类的内容在之前的一篇博客 JavaScript 中的 Class 类 中有更为详细的介绍。

📌 构造函数与实例化

每个class内部可以定义一个特殊的constructor方法,它是类的构造函数,用于初始化新创建的实例。当使用new关键字创建类的实例时,构造函数会被自动调用。

class Person {constructor(name, age) {this.name = name; // 使用this关键字给实例添加属性this.age = age;}
}const bob = new Person('Bob', 25); // 实例化Person类

📌 方法

类中可以定义方法,这些方法就是类的原型上的函数,可以被所有实例共享。

class Person {// ... 构造函数代码 ...sayHello() {console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);}
}bob.sayHello(); // 输出:Hello, my name is Bob and I am 25 years old.

📌 Getter 和 Setter

ES6允许在类中定义gettersetter方法,用来更安全、灵活地访问和修改对象的属性。

class User {constructor(firstName, lastName) {this.firstName = firstName;this.lastName = lastName;}get fullName() {return `${this.firstName} ${this.lastName}`;}set fullName(name) {const parts = name.split(' ');this.firstName = parts[0];this.lastName = parts[1];}
}const user = new User('John', 'Doe');
console.log(user.fullName); // 输出:John Doe
user.fullName = 'Jane Smith';
console.log(user.firstName); // 输出:Jane

📌 继承

ES6的类继承机制通过extends关键字实现,子类可以继承父类的所有属性和方法,并可以通过super关键字调用父类的构造函数和方法。

class Employee extends Person {constructor(name, age, position) {super(name, age); // 调用父类构造函数this.position = position;}work() {console.log(`${this.name} is working as a ${this.position}.`);}
}const jane = new Employee('Jane', 30, 'Developer');
jane.sayHello(); // 输出:Hello, my name is Jane and I am 30 years old.
jane.work(); // 输出:Jane is working as a Developer.

📌 静态方法和属性

类还可以拥有静态方法和属性,它们不属于实例,而是属于类本身,通过类直接调用。

class Helper {static calculateAge(birthYear) {return new Date().getFullYear() - birthYear;}
}console.log(Helper.calculateAge(1990)); // 输出当前年份减去1990的结果

通过这些特性,ES6class语法不仅为JavaScript带来了更符合直觉的面向对象编程模型,同时也保留了其灵活性和动态性,为开发者提供了强大的工具箱,以构建复杂的、可维护的应用程序。


总结

本文是关于ECMAS6JavaScript编程语言中引入的重要特性和改进的深入探讨。ES6代表了JavaScript语言的一次重大升级,它引入了多种新特性来提升代码的简洁性、可读性及执行效率,从而更好地应对复杂的应用场景。

  • 解构赋值解构赋值ES6中一项革命性的特性,它允许直接从数组或对象中提取值到变量中。这一特性简化了数据处理逻辑,提升了代码的清晰度。例如,可以轻易地交换变量值、为解构的变量提供默认值以及处理嵌套结构,极大地丰富了数据操作的方式。

  • 扩展与剩余运算符扩展运算符和剩余参数通过...语法提供了数组操作和函数参数处理的新维度。扩展运算符可以用于数组合并、克隆以及对象的浅复制与合并,而剩余参数则允许收集函数调用时多余的参数。这两者联合使用,让JavaScript代码在处理集合类型数据和灵活接受参数方面变得前所未有的强大和灵活。

  • 面向对象编程(Class)ES6通过引入class关键字,正式将面向对象编程的概念以一种更接近传统面向对象语言的语法形式带入JavaScript。尽管JavaScript的继承机制本质上仍是基于原型,class语法却提供了更直观的类定义和继承方式,包括构造函数、方法定义、getter/setter、继承(通过extendssuper关键字)、以及静态方法和属性的支持。这让熟悉Java、C#等语言的开发者能快速上手,并促进代码的组织和复用,特别是在构建大型应用程序时。

综上所述,ES6通过解构赋值扩展与剩余运算符、以及面向对象编程Class体系等关键特性,为JavaScript开发者装备了强大的工具,不仅现代化了代码风格,也极大地提高了开发效率和代码质量。这些特性共同推动JavaScript向更成熟、更健壮的编程语言发展,适应了不断变化的技术需求和日益增长的项目复杂度。

后续我们将继续深入了解ES6新特性,例如Modules模块系统、异步处理promise、生成器函数generatorsmapset数据结构…等等。当然其中有些内容在之前的博客也有详细探讨过,内容都在👉🏻 🔥 专栏:【JavaScript】。感谢大家支持~ ❤️

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

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

相关文章

动态规划之单词拆分

这次分享一道关于动态规划的leetcode,单词拆分。 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词…

【技术】汉诺塔的递归问题解析及多语言实现

汉诺塔的递归问题解析及多语言实现 汉诺塔(Hanoi Tower)问题是一个非常经典的递归问题。它起源于一个古老的传说:有三个柱子和64个大小不一的金盘,开始时这些金盘按从小到大的顺序放在柱子A上,目标是在柱子B上按同样的…

Java——Java开发环境

一、JDK 1、什么是JDK JDK(Java Development Kit,Java 开发工具包)是用于开发 Java 应用程序的核心工具包。它包含了编写、编译、调试和运行 Java 程序所需的一切工具和库。JDK 是每个 Java 开发者必备的工具。 2、JDK 主要组件 JDK主要包…

HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3 计科210X 甘晴void 202108010XXX 文章目录 计算机体系结构 实验31 实验目的2 实验过程2.0 预备知识2.0.1 多cache一致性算法——监听法2.0.1.1 MSI协议2.0.1.2 MESI协议2.0.1.3 本题讲解 2.0.2 多cache一致性算法——目录法2.0.2.1 有中心的目录法2.0.2…

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

B2126 连续出现的字符

连续出现的字符 题目描述 给定一个字符串&#xff0c;在字符串中寻找第一个连续出现次数不低于 k k k 次的字符。 输入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是仅包含大小写字母的字符串。 输出格式 字符串中第一个连续出现次数不低于 k 次的字符…

Python面试宝典:Python中与动态规划和排序算法相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十二章:高级数据结构和算法:第二节:Python中实现各类高级数据结构与算法三】 第十二章:高级数据结构和算法第二节:Python中实现各类高级数据结构与算法2.3、python中与动态规划和排…

网页如何给js后台传递数字类型参数

网页无法通过get方法传递数字参数给js后台&#xff0c;就是网页端写的是数字参数&#xff0c;传递给后台也变成了数字字符串。而js对数字类型和字符串类型是不相同的。由于我们的代码是通过中间件挂载接口的&#xff0c;通过joi库检查参数。 const Joi require(joi); //注意&…

秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

文章目录 复习Z字形变换实现代码参考代码 两数之和复习代码 新作整数反转个人实现实现代码 参考做法字符串转换整数个人解法 分析总结 复习 Z字形变换 实现代码 这里使用了他的思想&#xff0c;但是没有用他的代码&#xff0c;虽然已经比上次简洁了&#xff0c;但是还是不够&…

【日记】终于鼓起勇气买了吹风机!(356 字)

正文 好忙。今天比昨天还要忙&#xff0c;水都没喝几口。嗯&#xff0c;好像只喝了两口。 今天补了一份印鉴卡&#xff0c;销了一个户&#xff0c;变了一个户&#xff0c;弄了一大堆资料找人签字&#xff0c;还顺带要解决一个押品的历史遗留问题。 中午睡得好香&#xff0c;都不…

如何理解和使用 this 关键字

this 关键字是许多编程语言中的一个核心概念&#xff0c;在面向对象编程&#xff08;OOP&#xff09;中尤为重要。在JavaScript、Java、C、C#等语言中&#xff0c;this 扮演着至关重要的角色。理解 this 的意义和用法&#xff0c;对于编写清晰、有效的代码至关重要。 什么是th…

超分论文走读

codeFormer 原始动机 高度不确定性&#xff0c;模糊到高清&#xff0c;存在一对多的映射纹理细节丢失人脸身份信息丢失 模型实现 训练VQGAN 从而得到HQ码本空间作为本文的离散人脸先验。为了降低LQ-HQ映射之间的不确定性&#xff0c;我们设计尽量小的码本空间和尽量短的Code…

ECS搭建2.8版本的redis

要在ECS&#xff08;Elastic Compute Service&#xff09;上手动搭建Redis 2.8版本&#xff0c;你可以按照以下步骤操作&#xff1a; 步骤1&#xff1a;更新系统和安装依赖 首先&#xff0c;登录到你的ECS实例&#xff0c;确保系统是最新的并安装必要的依赖包&#xff1a; s…

运营推广最容易被忽略的细节!用短链接推广必须要掌握这些要点!

短链接是目前很多企业进行网络推广最常用的方式之一&#xff0c;是引流转化的重要桥梁&#xff0c;很多工作者可能觉得用短链接推广&#xff0c;只需要简简单单的把生成好的短链接放上去就行&#xff0c;但是实际上有很多细节要点是需要着重注意的&#xff0c;今天小编就围绕这…

做外贸怎么给新老客户定价

通常情况下我们对于新客户的关注点要比老客户更多一些&#xff0c;大概是因为新客户的开发周期比较长而且不确定性也很大。 但是对于一些返单的老客户对比来讲&#xff0c;老客户的稳定性就会相对来说增加很多&#xff0c;如果款式规格都是固定的&#xff0c;那么老客户从选品…

[AIGC] Nginx常用变量详解

Nginx非常强大&#xff0c;其主要功能包括HTTP服务器、反向代理、负载均衡等。Nginx的配置中有许多内置的变量&#xff0c;你可以在配置文件中使用这些变量进行灵活的配置。在本篇文章中&#xff0c;我们将介绍一些Nginx中常见的变量&#xff0c;包括proxy_add_header。 常见变…

redis显示RDB error

报错问题&#xff1a;"RDB error" 是指在Redis的RDB持久化过程中出现了错误。Redis的RDB持久化是通过将内存中的数据集快照保存到磁盘中的一种方式。如果在这个过程中遇到问题&#xff0c;Redis会记录一条包含"RDB error"的日志信息。上图错误&#xff0c;…

【论文复现】——基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情况,本文提出…

Go 超时退出

1、使用 time.After() 创建超时退出&chan&select 通过 time.After() 函数创建一个超时通道&#xff0c;当超时发生时&#xff0c;通道会发送一个信号。结合 select 语句&#xff0c;可以在超时时退出程序。 package mainimport ("fmt""time" )…