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.mzph.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)抽象工厂进行基本逻辑定义具体工厂进行对接…