【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.pswp.cn/bicheng/18838.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18838.shtml
英文地址,請注明出處:http://en.pswp.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" )…