6.1es新特性解構賦值

解構賦值是?ES6(ECMAScript 2015)引入的語法,通過模式匹配從數組或對象中提取值并賦值給變量。:

  1. 功能實現

    • 數組解構:按位置匹配值,如?let [a, b] = [1, 2]
    • 對象解構:按屬性名匹配值,如?let {name, age} = {name: 'John', age: 30}
    • 嵌套解構:支持多層結構提取,如?let {a: {b}} = {a: {b: 1}}]。
  2. 后續版本(如 ES2018)對其功能進行了擴展,例如:
  • 對象剩余屬性解構let {a, ...rest} = {a: 1, b: 2}
  • 函數參數解構:支持直接解構傳入參數]。
    //通過 ... 運算符將對象中未顯式解構的屬性收集到一個新對象中
    const obj = { a: 1, b: 2, c: 3 };
    const { a, ...rest } = obj;console.log(a);     // 輸出:1 
    console.log(rest);  // 輸出:{ b: 2, c: 3 }//在函數定義時直接解構傳入的對象參數,簡化參數提取過程// 參數解構基本用法 
    function printUser({ name, age }) {console.log(`Name:  ${name}, Age: ${age}`);
    }const user = { name: "Alice", age: 25, role: "admin" };
    printUser(user); // 輸出:Name: Alice, Age: 25 

解構詳解

  • ??數組解構??:按位置匹配元素,支持跳過、默認值和剩余模式(...

  • ??對象解構??:按屬性名匹配值,支持變量重命名、默認值和嵌套解構

let [a, b] = [1, 2];  // a=1, b=2 
let [x, , z] = [10, 20, 30];  // x=10, z=30(跳過中間元素)
// 當解構值為 undefined 時觸發默認值:
let [name = "Guest"] = [];  // name="Guest"
//剩余參數捕獲
const [x, ...y] = [1,2,3]; // x=1, y=[2,3]// 對象解構賦值  對象解構示例
//通過屬性名直接賦值(變量名需與屬性名一致)
let {name, age} = {name: "Alice", age: 25};  // name="Alice", age=25 
//可重命名變量或設置默認值:
let {id: userId, role = "user"} = {id: 123};  // userId=123, role="user"const { name: userName, age = 18 } = { name: 'Alice' }; // userName='Alice', age=18
//支持多層嵌套結構:
let {data: {list}} = {data: {list: [1,2,3]}};  // list=[1,2,3]//已聲明變量解構,需用括號包裹表達式
let name;
({name} = {name: "Bob"});  // name="Bob"

解構賦值的復制行為

解構賦值本質是??淺拷貝??,即僅復制對象的第一層屬性:

  1. ??基本類型??:直接復制值(如數字、字符串)。
  2. ??引用類型??:復制引用地址,修改新變量會影響原對象

const obj = { a: 1, b: { c: 2 } };
const { a, b } = obj;
b.c = 3; // 原對象的 b 屬性也會被修改

解構賦值的常見陷阱

  1. ??解構未定義對象??

    const { a } = undefined; // 報錯
    // 解決方案:提供默認值或條件判斷
    const { a } = obj || {};
  2. ??變量名沖突??

    const a = 1;
    const { a: b } = { a: 2 }; // b=2, 原變量 a 不受影響
  3. ??嵌套解構的可讀性問題??

    // 復雜嵌套降低可讀性
    const { user: { profile: { name } } } = data;
    // 建議分步解構
    const { user } = data;
    const { profile } = user;
  4. ??剩余參數(...)的位置限制??

    const [a, ...b, c] = [1,2,3]; // 語法錯誤,剩余參數必須為最后一個元素

解構賦值的典型應用場景

  1. ??函數參數解構??

    function getUser({ name = 'Guest', age }) { ... }
  2. ??交換變量值??

    let x = 1, y = 2;
    [x, y] = [y, x]; // x=2, y=1
  3. ??處理 API 響應??

    const { data: { user: { id, name } } } = await fetch();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76273.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot美容院管理系統設計與實現

基于SpringBoot的美容院管理系統免費源碼,幫助您快速搭建高效、智能的美容院管理平臺。該系統涵蓋了管理員、技師、前臺、普通用戶及會員五大功能模塊,以下是系統的核心功能與部署方式詳細介紹。 ?功能模塊 ?管理員功能 ?美容部位管理:支…

記一次某網絡安全比賽三階段webserver應急響應解題過程

0X01 任務說明 0X02 靶機介紹 Webserver(Web服務器)是一種軟件或硬件設備,用于接收、處理并響應來自客戶端(如瀏覽器)的HTTP請求,提供網頁、圖片、視頻等靜態或動態內容,是互聯網基礎設施的核心…

ChatGPT 4:引領 AI 創作新時代

文章目錄 前言一、ChatGPT 4 的技術革新二、AI 文案創作:精準生成與個性化定制三、AI 繪畫藝術:從文字到圖像的神奇轉化四、AI 視頻制作:自動化剪輯與創意實現五、知識庫與 ChatGPT 4 的深度融合六、全新的變革和機遇七、相關書籍推薦《ChatG…

HTTP請求-請求行

請求行(方法,URL,版本號) 方法: 描述了這次請求的目的。 常見方法: GET:從服務器拿一個東西過來(讀操作) POST:往服務器放一個東西去(寫操作…

OSPF不規則區域和LSA

OSPF不規則區域 1.遠離骨干的非骨干區域 R1-R4四臺路由器能夠正常學習到彼此路由,但是R5不行,因為R5是非法ABR 解決方法: 1使用Tunnel隧道將AR4連接到骨干區域 (1) 使用隧道解決不規則區域的問題 a.可能造成選路不…

【VS Code】開發C++跳轉配置

C配置c_cpp_properties.json {"env": {"myIncludePath": ["${workspaceFolder}/src/include","${workspaceFolder}/src","${workspaceFolder}","/home/xxx/include/"],"myDefines": ["RELEASE&qu…

Spring AI應用:利用DeepSeek+嵌入模型+Milvus向量數據庫實現檢索增強生成--RAG應用(超詳細)

Spring AI應用:利用DeepSeek嵌入模型Milvus向量數據庫實現檢索增強生成–RAG應用(超詳細) 在當今數字化時代,人工智能(AI)技術的快速發展為各行業帶來了前所未有的機遇。其中,檢索增強生成&…

Spring 的 IoC 和 DI 詳解:從零開始理解與實踐

Spring 的 IoC和 DI 詳解:從零開始理解與實踐 一、IoC(控制反轉) 1、什么是 IoC? IoC 是一種設計思想,它的核心是將對象的創建和管理權從開發者手中轉移到外部容器(如 Spring 容器)。通過這種…

JVM基礎架構:內存模型×Class文件結構×核心原理剖析

🚀前言 “為什么你的Java程序總在半夜OOM崩潰?為什么某些代碼性能突然下降?一切問題的答案都在JVM里! 作為Java開發者,如果你: 對OutOfMemoryError束手無策看不懂GC日志里的神秘數字好奇.class文件如何變…

.DS_Store文件泄露、.git目錄泄露、.svn目錄泄露漏洞利用工具

🐉工具介紹 一款圖形化的 .DS_Store文件泄露、.git目錄泄露、.svn目錄泄露漏洞利用工具。 🎯使用 本工具使用Python3 PyQt5開發,在開始使用前,請確保已經安裝了相關模塊: pip3 install -r requirements.txt -i ht…

為何在 FastAPI 中需要允許跨域訪問(CORS)?(Grok3 回答)

prompt: 你是一個文筆流暢、專業性極強的技術博客博主,你將結合具體的例子和實際代碼解釋寫一篇為何后端選擇fastapi框架時,需要允許跨域訪問。 為何在 FastAPI 中需要允許跨域訪問(CORS)? 在現代 Web 開發中&#xf…

JDK8前后日期(計算兩個日期時間差-高考倒計時)

JDK8之前日期、時間 Date SimpleDateFormat Calender JDK8開始日期、時間 LocalDate/LocalTime/LocalDateTime ZoneId/ZoneDateTIme Instant-時間毫秒值 DateTimeFormatter Duration/Period

Gerapy二次開發:用戶管理專欄主頁面開發

用戶管理專欄主頁面開發 寫在前面用戶權限控制用戶列表接口設計主頁面開發前端account/Index.vuelangs/zh.jsstore.js后端Paginator概述基本用法代碼示例屬性與方法urls.pyviews.py運行效果總結歡迎加入Gerapy二次開發教程專欄! 本專欄專為新手開發者精心策劃了一系列內容,旨…

關于Spring MVC中傳遞數組參數的詳細說明,包括如何通過逗號分隔的字符串自動轉換為數組,以及具體的代碼示例和總結表格

以下是關于Spring MVC中傳遞數組參數的詳細說明,包括如何通過逗號分隔的字符串自動轉換為數組,以及具體的代碼示例和總結表格: 1. 核心機制 Spring MVC支持直接通過逗號分隔的字符串將請求參數自動轉換為數組(String[]、int[]等&…

大模型學習七:?小米8閑置,直接安裝ubuntu,并安裝VNC遠程連接手機,使勁造

一、說明 對于咱們技術人來說,就沒有閑的蛋疼的時候,那不是現在機會來了 二、刷機器準備 1、申請解鎖手機 申請解鎖小米手機https://www.miui.com/unlock/download.html 下載工具,安裝下面的步驟來,官網不欺人吧 打開開發者工…

repo安裝配置

1.安裝屬性 以下配置方式二選一進行安裝 1.1全局級別配置 1. 安裝 repo 工具 在終端中輸入以下命令以下載 repo 工具: curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo chmod ax /usr/bin/repo 1.2用戶級別配置 1. 安裝 r…

Go 語言數據類型

Go 語言數據類型 概述 Go 語言(也稱為 Golang)是一種靜態強類型、編譯型、并發型、具有垃圾回收功能的編程語言。自2009年發布以來,Go 語言因其簡潔的語法、高效的執行速度和強大的并發處理能力而廣受歡迎。本文將詳細介紹 Go 語言中的數據類型,幫助讀者更好地理解和掌握…

C# 看門狗策略實現

using System; using System.Threading;public class Watchdog {private Timer _timer;private volatile bool _isTaskAlive;private readonly object _lock new object();private const int CheckInterval 5000; // 5秒檢測一次private const int TimeoutThreshold 10000; …

Font Awesome Web 應用圖標

1. 什么是 Font Awesome Web 應用圖標 Font Awesome Web 應用圖標是 Font Awesome 圖標庫中與 Web 開發相關的子集,適用于界面設計、用戶交互和功能標識。 定義與作用 定義:這些圖標包括導航(如“主頁”)、操作(如“…

如何實現H5端對接釘釘登錄并優雅擴展其他平臺

如何實現H5端對接釘釘登錄并優雅擴展其他平臺 釘釘H5登錄邏輯后端代碼如何實現?本次采用策略模式工廠方式進行定義接口確定會使用的基本鑒權步驟具體邏輯類進行實現采用注冊表模式(Registry Pattern)抽象工廠進行基本邏輯定義具體工廠進行對接…