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

news2024/11/16 23:41:19

在这里插入图片描述

🔥 个人主页:空白诗
🔥 热门专栏:【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.coloradmin.cn/o/1712639.html

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

相关文章

iOS自动连接已知Wi-Fi功能的实现

首先需要在配置文件申请的时候将hotspot勾选上&#xff0c;之后还要在x-code里添加对应的配置&#xff0c;由于我们并没有用到获取设备周边Wi-Fi的功能&#xff0c;所以就没申请相关权限 相关连接Wi-Fi代码如下&#xff1a; #import <NetworkExtension/NetworkExtension.h&…

LeetCode583:两个字符串的删除操作

题目描述 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 代码 解法1 /*dp[i][j]&#xff1a;以i-1为结尾的wrod1中有以j-1为尾的word2的个数为了让word1和word2相同&#xff0c;最少操作…

排序专题(常见8种)【思路解析和代码实现】【2w字长文】

排序专题&#xff08;常见8种&#xff09; 1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中…

如何在文档中有效添加网格:技巧与实例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;为何添加网格至关重要 二、网格添加的基本步骤 1. 确定网格类型和样式…

解决 Echarts 图 tooltip 层级太高穿透问题

问题场景&#xff1a;Echarts 图 tooltip 是自动轮播的&#xff0c;当点击某个区域出现弹窗时&#xff0c;tooltip和弹窗同时显示&#xff0c;没在遮罩层下面&#xff0c;查看tooltip的层级显示99999&#xff0c;所以这里改一下tooltip的层级。 设置 extraCssText: "z-ind…

vue3 使用vant

使用前提&#xff1a; vite创建的vue3项目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入样式&#xff1a; main.js import vant/lib/index.css vant封装 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…

使用docker部署项目

一、docker私有镜像仓库 1、docker私有镜像仓库 库&#xff08;Repository&#xff09;是集中存放镜像的地方&#xff0c;又分为公共镜像和私有仓库。 当我们执行docker pull xxx的时候&#xff0c;它实际上是从registry.docker.com这个地址去查找&#xff0c;这就是Docker公…

计量和测量的区别有哪些?两者的关系是什么样的?

计量和测量在行业内经常被混用&#xff0c;更不用说外行人对计量和测量的定义不够清晰&#xff0c;无论是看字面还是定义&#xff0c;似乎两者没有什么太大的区别&#xff0c;但实际上&#xff0c;两者还是有区别的&#xff0c;不过又存在千丝万缕的联系&#xff0c;那么计量和…

【惊艳视界】Perfectly Clear Workbench:让您的图像瞬间焕发生机!

在数字化时代&#xff0c;图像已成为我们生活中不可或缺的一部分。无论是摄影爱好者&#xff0c;还是专业设计师&#xff0c;都渴望拥有一款能够轻松提升图像质量的神奇工具。今天&#xff0c;我们为您带来了一款图像清晰处理软件的佼佼者——Perfectly Clear Workbench&#x…

009-Linux的管道和重定向

文章目录 前言 一、重定向 1.1、FD简介 1.2、FD举例 1.3、重定向简介 1.3.1、输出重定向 正确输出&#xff1a; 错误输出 案例1&#xff1a;正确输出重定向 案例2&#xff1a;错误输出重定向 ​编辑 案例3&#xff1a;正确和错误都输出重定向到相同位置 1.3.2、输…

学而后思,思学并进。学而不思则罔,思而不学则殆。

最后呢&#xff0c;我们学完这本书&#xff0c;读完这本书&#xff0c;得看他&#xff0c;这本书能不能去帮我们看清楚&#xff0c;很多的&#xff0c;现实社会中的事情的真实的本相&#xff0c;以及他所处的时代的事情的本相&#xff0c;因为学习&#xff0c;我们是为了学以致…

开源博客项目Blog .NET Core源码学习(28:App.Hosting项目结构分析-16)

本文学习并分析App.Hosting项目中后台管理页面的用户管理页面。   用户管理页面用于显示、检索、新建、编辑、删除用户数据&#xff0c;其附带一新建及编辑页面&#xff0c;以支撑新建和编辑用户数据&#xff0c;同时还附带重置密码页面&#xff0c;以重置用户密码。整个页面…

记录一次Redisson使用synchronized和分布式锁不生效的原因

最近在开发的过程中&#xff0c;遇到了一个并发场景&#xff0c;用户进行方案复制的时候&#xff0c;当快速点击两次操作的时候&#xff0c;出现了复制方案重名的情况&#xff0c;实际上是复制方案的方案名称&#xff0c;是由后端根据数据库已有的方案名称和当前要复制的方案名…

【测试SQLite】测试SQLite支持的SQL语句分类

测试SQLite支持的SQL语句分类 为了全面测试SQLite支持的SQL语句&#xff0c;需要设计一个包含多种类型的表结构&#xff0c;并编写各种SQL语句来测试这些功能。目前按照以下分类进行测试&#xff1a; 数据定义语言&#xff08;DDL&#xff09;数据操作语言&#xff08;DML&am…

【全网最全】2024电工杯数学建模B题53页成品论文+完整matlab代码+完整python代码+数据预处理+可视化结果等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模B题53页成品论文完整matlab、py代码19建模过程代码数据等&#xff08;后续会更新&#xff09;「首先来看看目前已有的资…

4. 排序算法

文章目录 1.简单排序1.1 冒泡排序1.1.1 步骤核心思想1.1.2 参考代码1.1.3 时间复杂度1.1.4 空间复杂度1.1.5 优化 1. 2. 选择排序1.2.1 核心思想1.2.2 步骤1.2.3 参考代码1.2.4 时间复杂度1.2.5 空间复杂度1.2.6 优化 1.3 插入排序1.3.1 思想1.3.2 步骤1.3.3 参考代码1.3.4 时间…

工控一体机10.1寸显示器电容触摸屏(YA1308101JK)产品规格说明书

如果您对工控一体机有任何疑问或需求&#xff0c;或者对如何集成工控一体机到您的业务感兴趣&#xff0c;可移步控芯捷科技。 一、硬件功能介绍 YA1308101JK产品介绍&#xff1a; YA1308101JK搭载 Android10 主流操作系统&#xff0c;具有系统版本更高、占用内存更低、运行效率…

Orcle查询组合字段重复的数据

oracle拼接字符串 在Oracle中&#xff0c;可以使用||运算符或CONCAT函数来拼接字符串。 使用||运算符&#xff1a; SELECT Hello, || World! AS concatenated_string FROM dual;使用CONCAT函数&#xff1a; SELECT CONCAT(Hello, , World!) AS concatenated_string FROM d…

Python的解析网页【XPath】

XPath 什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标准查询语言&#xff0c;广泛用于解析和操作XML文档。 安装配置 安装lxml&#xff1…

微软Build开发者大会速览,OpenAI CEO站台剧透新模型

5月22日凌晨&#xff0c;微软Build 2024开发者大会在美国西雅图召开。微软CEO萨蒂亚纳德拉在会上发表主题演讲&#xff0c;宣布了超过50项产品更新&#xff0c;涵盖AI基础设施、模型产品以及生产力工具等多个领域。纳德拉强调&#xff0c;微软一直致力于让人工智能理解人类并帮…