当前位置: 首页 > news >正文

JavaScript中的解构赋值

1. 数组解构赋值

1.1 提取数组中的元素

const [first, second, third] = [1, 2, 3];  
console.log(first); // 输出 1  
console.log(second); // 输出 2  
console.log(third); // 输出 3

1.2 跳过数组中的某些元素

const [, second, ] = [1, 2, 3];  
console.log(second); // 输出 2

1.3 使用剩余运算符(…)获取剩余元素

const [first, ...rest] = [1, 2, 3, 4, 5];  
console.log(first); // 输出 1  
console.log(rest); // 输出 [2, 3, 4, 5]

2. 对象解构赋值

2.1 提取对象的属性

const person = { name: 'Alice', age: 30, city: 'New York' };  
const { name, age, city } = person;  
console.log(name); // 输出 'Alice'  
console.log(age); // 输出 30  
console.log(city); // 输出 'New York'

2.2 重命名变量以匹配对象属性

const person = { firstName: 'Alice', age: 30 };  
const { firstName: name, age } = person;  
console.log(name); // 输出 'Alice'  
console.log(age); // 输出 30

2.3 设置默认值

const person = { name: 'Alice' };  
const { name = 'Unknown', age = 0 } = person;  
console.log(name); // 输出 'Alice'  
console.log(age); // 输出 0,因为age在person对象中不存在

2.4 解构嵌套对象

const person = {  name: 'Alice',  address: {  city: 'New York',  country: 'USA'  }  
};  
const { name, address: { city, country } } = person;  
console.log(name); // 输出 'Alice'  
console.log(city); // 输出 'New York'  
console.log(country); // 输出 'USA'

3. 函数参数解构

解构赋值也可以用于函数参数,使得函数签名更加简洁。

function greet({ name, age }) {  console.log(`Hello, my name is ${name} and I'm ${age} years old.`);  
}  greet({ name: 'Bob', age: 25 }); // 输出 "Hello, my name is Bob and I'm 25 years old."

4. 解构与展开(…)运算符的结合

你可以在解构时使用展开运算符来复制对象或数组的一部分到新的变量中。

const person = { name: 'Alice', age: 30, city: 'New York' };  
const { name, ...otherInfo } = person;  
console.log(name); // 输出 'Alice'  
console.log(otherInfo); // 输出 { age: 30, city: 'New York' }

相关文章:

  • 为啥找对象千万别找大厂男,还好我不是大厂的。。
  • Python武器库开发-武器库篇之链接提取器(六十)
  • 【跟我学RISC-V】(三)openEuler特别篇
  • 园区无线网新架构:无CAPWAP的集中式转发
  • 一文详解:什么是小程序SDK?
  • java1.8运行arthas-boot.jar运行报错解决
  • 编程属于什么类学科门类:深入探索与解析
  • PDM 测试
  • idea自定义注释模板
  • Github 2024-06-15Rust开源项目日报Top10
  • 77道经典的软件测试面试题(答案+文档)
  • Windows Server 远程桌面显示登录界面而不是直接登录进入的问题
  • [Cloud Networking] Layer3 (Continue)
  • CCAA质量管理【学习笔记】​​ 备考知识点笔记(五)质量设计方法与工具
  • Tomcat Websocket应用实例研究
  • Centos6.8 使用rpm安装mysql5.7
  • Elasticsearch 参考指南(升级前重新索引)
  • Hibernate最全面试题
  • isset在php5.6-和php7.0+的一些差异
  • java概述
  • java正则表式的使用
  • node 版本过低
  • python3 使用 asyncio 代替线程
  • Vim Clutch | 面向脚踏板编程……
  • 关于for循环的简单归纳
  • 记一次用 NodeJs 实现模拟登录的思路
  • 力扣(LeetCode)56
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 实习面试笔记
  • 思维导图—你不知道的JavaScript中卷
  • 微服务框架lagom
  • 新书推荐|Windows黑客编程技术详解
  • 学习HTTP相关知识笔记
  • 学习使用ExpressJS 4.0中的新Router
  • 移动端解决方案学习记录
  • Hibernate主键生成策略及选择
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $jQuery 重写Alert样式方法
  • (PADS学习)第二章:原理图绘制 第一部分
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .Net中ListT 泛型转成DataTable、DataSet