JS解构赋值详解

article/2025/10/12 23:38:32

目录

  • 1、 概念
  • 2、 什么是解构赋值
  • 3、 数组解构
    • 3.1 数组解构的概念
    • 3.2 基本语法
    • 3.3 典型应用交互2个变量
    • 3.4 解构函数
    • 3.5 变量多 单元值少的情况
    • 3.6 变量少 单元值多的情况
    • 3.7 按需导入,忽略某些返回值
    • 3.8 支持多维数组的解构
  • 4、对象解构
    • 4.1 对象解构的概念
    • 4.2 基本语法
    • 4.3 给新的变量名赋值
    • 4.4 数组对象解构
    • 4.5 多级对象解构

1、 概念

ES6 提供了更简洁的赋值模式,从数组和对象中提取值,这被称为解构。

2、 什么是解构赋值

解构赋值是一种快速为变量赋值的简洁语法,本质上仍然是为变量赋值

通俗来说,即解析某一数据的结构,将我们想要的东西提取出来,赋值给变量或常量。
示例:

	const arr = [1,2,3]const [a,b,c]= arrconsole.log(a,b,c);

在这里插入图片描述
将数组里的值获取出来,赋值给 a,b,c

3、 数组解构

3.1 数组解构的概念

数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法。

3.2 基本语法

  1. 赋值运算符 = 左侧的 [ ] 用于批量声明变量,右侧数组的单元值将被赋值给左侧的变量
  2. 变量的顺序对应数组单元值的位置依次进行赋值操作。

通过例子来理解一下:

  1. 第一种方法
 	//普通的数组const arr = [1, 2, 3]//批量声明变量a,b,c//同时将数组单元值1,2,3依次赋值给变量a,b,cconst [a, b, c] = arrconsole.log(a, b, c);//1,2,3
  1. 第二种方法
 	//同时将数组单元值1,2,3依次赋值给变量a,b,cconst [a, b, c] = [1, 2, 3]console.log(a, b, c);//1,2,3

3.3 典型应用交互2个变量

1、传统写法

	let a = '张三'let b = '李四'let tem = ''tem = aa = bb = temconsole.log(a,b); //李四,张三

2、数组解构写法

 	let a = '张三'let b = '李四';//这里必须要有分号[b,a] = [a,b]console.log(a,b);

3.4 解构函数

 	function getValue() {return [1, 2]}let [a, b] = getValue()console.log(a, b);//1,2

3.5 变量多 单元值少的情况

    const [a,b,c,d] = ['张三','李四','王五']console.log(a,b,c,d);//张三 李四 王五 undefined

变量的数量大于单元值数量时,多余的变量将被赋值为 undefine

防止有undefined传递单元值的情况,可以设置默认值。

    const [a='张三',b='李四',c='王五',d='赵六'] = ['张三','李四','王五']console.log(a,b,c,d);//张三 李四 王五 赵六

3.6 变量少 单元值多的情况

    const [a,b] = ['张三','李四','王五']console.log(a,b);//张三 李四 

利用剩余参数解决变量少 单元值多的情况:

	const [a,...b] = ['张三','李四','王五']console.log(a,b);//张三 (2) ['李四', '王五']

在这里插入图片描述

3.7 按需导入,忽略某些返回值

你可以有选择性的跳过一些不想得到的返回值

    const [a, , b] = ['张三', '李四', '王五']console.log(a, b);//张三 王五

3.8 支持多维数组的解构

 	const [a,b] = ['张三', ['李四', '王五']]console.log(a);//张三console.log(b);//['李四', '王五']    

想要拿到王五怎么办?

 	const [a,[b,c]] = ['张三', ['李四', '王五']]console.log(a);//张三console.log(b);//李四console.log(c);//王五

4、对象解构

4.1 对象解构的概念

对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法。

4.2 基本语法

  1. 赋值运算符 = 左侧的 {} 用于批量声明变量,右侧对象的属性值将被赋值给左侧的变量
  2. 对象属性的值将被赋值给与属性名相同的变量
  3. 注意解构的变量名不要和外面的变量名冲突否则报错.
  4. 对象中找不到与变量名一致的属性时变量值为 undefine

通过一个小例子理解一下,和数组解构差不多。

	//普通对象const user = {name: '张三',age: 18}// 批量声明变量name,ageconst { name, age } = userconsole.log(name);//张三console.log(age);//18

注:变量名必须和对象的属性名一致。不然返回结果是undefined

 		//普通对象const user = {name: '张三',age: 18}// 批量声明变量names,agesconst { names, ages } = userconsole.log(names);console.log(ages);

在这里插入图片描述

4.3 给新的变量名赋值

如果在解构对象之前有一个对象的同名变量,在后面进行解构赋值的时候将会报错,提示我们标识符“uname”已经声明。

	let uname = 1//同名变量const user = {uname: '张三', age: 18}const { uname, age } = userconsole.log(uname);console.log(age);

在这里插入图片描述
这个时候我们就可以通过给新的变量名赋值的方法解决这个问题。

 	let uname = 1const user = {uname: '张三', age: 18}const { uname: username, age } = userconsole.log(username);console.log(age);

在这里插入图片描述

4.4 数组对象解构

	const user = [{name: '李四',age: 18}]const [{ name, age }] = userconsole.log(name, age);//李四 18

4.5 多级对象解构

	const dog = {name: '狗剩',family: {mother: '狗娘',father: '狗爹',sister: '狗儿'},age: 6}const { name, family: { mother, father, sister } } = dogconsole.log(name,mother,father,sister);//狗剩 狗娘 狗爹 狗儿

上述代码中family对象嵌套在dog对象里面,在对象嵌套的时候,我们得到family里面的属性,就需要告诉程序属性是在family对象里面,利用family:的形式获取。


http://chatgpt.dhexx.cn/article/mQnMhIR1.shtml

相关文章

js对象赋值

js对象赋值 1. 含有相同的键进行赋值2. 复制对象(遍历赋值)3. 复制对象(直接赋值)4. es6的Object.assign()方法拷贝对象 (深拷贝,但没完全深)5. JSON.parse(JSON.stringify(obj))7. 总结&#x…

js赋值运算的过程

13.js赋值运算的过程 示例 这道题的结果是什么? var a {n:1}; var b a; a.x a {n:2};console.log(a.x); console.log(b.x);正确答案是 undefined {n:2}这道题考察的是js赋值运算的过程 我们以a1这个赋值运算为例,当我们执行a1这段代码时,js引擎的处理过程是这样的 找…

js中的直接赋值和引用赋值

在JS中,数据分为两大类:基本数据类型 和 引用数据类型;基本数据类型包括: string、number、Boolean、null、undefined、symbol、biglnt七大类,引用数据类型包括: Array、Object、Function。这两种数据类型的数据传递也有两种方式:…

Js对象的赋值

let obj{a:1}let obj2objobj2.a100console.log(obj.a)//100//对象的结构赋值 ...let obj{a:1}let obj2{...obj} obj2.a100console.log(obj.a)//1数据存放 1.基本类型的变量是存放在栈区的(栈区指内存里的栈内存) 2.引用类型的值是同时保存在栈内存和堆内…

JS解构赋值

一、前言 解构赋值语法是一种 Javascript 表达式。通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。本文将讨论解构赋值的作用与其用法。 目录 一、前言 二、用途 三、数组的解构 1.变量声明并且赋值时的解构 2.默认值 3.剩余数组赋值…

阿里云账号未开启手机号验证码登录解决方法

阿里云账号登录支持手机号验证码登录方式,但是如果是2022.4.1前注册的账号,需要先在账号中心开启手机号登录,才可以使用手机号登录。阿里云百科来详细说下阿里云账号开启手机号登录的方法: 阿里云账号手机号登录 阿里云账号支持…

如何使用阿里云短信服务实现登录页面,手机验证码登录?

1:个人如何使用阿里云短信服务? 2022如何使用个人阿里云短信服务?_linxiMY的博客-CSDN博客添加完成之后,等待审核!一般2个小时就会出来审核结果了,这里我因为注册申请时填写规则有误,足足审核了…

手机验证码登录,账号登录结合

本项目基于腾讯外包框架&#xff08;wei框架&#xff09; 地址&#xff1a;https://github.com/twinh/wei/tree/master/docs/zh-CN#wei HTML页面&#xff1a; 【基于bootstrap前端框架】 头部&#xff1a;<ul id"js-reset-tabs" class"nav tab-underline…

【手机号验证/前端】Vue2+elementUI编写一个手机号验证码登录页面,路由式开发(附完整代码)

目录 效果图&#xff1a; 一、template部分 二、style样式 三、script部分 1.先对手机号的格式进行一个判断 2.接下来就是表单验证规则rules 3.最后就是methods了 &#xff08;1&#xff09;首先我们给获取验证码绑定一个方法 &#xff08;2&#xff09;然后封装一个a…

浅谈手机验证码登录

注册和登录&#xff0c;是互联网产品的最基本功能&#xff0c;这里涉及到很多安全问题和用户便捷问题。今天&#xff0c;我们来简要聊一下手机验证码登录。 在之前的文章中&#xff0c;我们聊了注册登录原理及密码安全问题&#xff0c;这种方式是基于账号密码登录的。 然而&…

2022.9.13 手机验证码登录功能

总结一下今天在项目中完成的功能 手机验证码登录功能 用到的前端技术&#xff1a;vue、vuex、axios&#xff0c;element-ui组件库 功能实现总体思路&#xff1a; 一. 用户在登录界面输入手机号&#xff0c;通过表单验证后&#xff0c;点击按钮获取验证码 二. 用户输入手机验证…

【从零开始分析项目实战】12-阿里云手机验证码登录功能的实现

注&#xff1a;本文章基于黑马程序员相关视频及资料进行编写&#xff0c;代码简单&#xff0c;较容易理解&#xff0c;若有问题或者源码资料获取可以在评论区留言或者联系作者&#xff01; 文章目录 开篇一、短信发送&#xff08;1&#xff09;短信服务介绍&#xff08;2&#…

手机验证码登录

手机验证码登录 符号说明&#xff1a; []&#xff1a;表示可选或某些条件下流程。 需求说明&#xff1a; 用户可在登录页面使用手机验证码登录&#xff0c;若该手机号未绑定则输入验证码后还需输入用户账号密码进行绑定&#xff0c;绑定后则成功使用验证码登录。 用户可在…

登录模块(手机验证码)

本人为实习生,第一次写博客,写的不好的大家多多谅解 应公司近期需求,需要单独开发一个后台管理系统。 自己按实际业务写了一个登录接口已经实现,时序图如下 源码牵扯业务量太大,这里只放出部分关键实现源码,整合思路可以配合时序图去理解。 Controller层 package com…

java十大排序算法

十大排序算法在面试java过程中想必或多或少都会有。尤其是在笔试题上&#xff0c;有些大厂就让你现场写个十大排序。是不是一下子整懵了。。。 目录 一、首先先介绍下十大排序算法&#xff1a; 1、算法分类 2 、算法复杂度 3、 相关概念 二、详细分析各个算法 1、冒泡排…

Go语言十大排序算法

文章目录 Go语言十大排序算法0x01 冒泡排序0x02 选择排序0x03 插入排序0x04 希尔排序0x05 归并排序0x06 快速排序0x07 堆排序0x08 计数排序0x09 桶排序0x10 基数排序总结按时间复杂度分类&#xff1a;按稳定性分类按排序方式 Go语言十大排序算法 稳定&#xff1a;如果a原本在b前…

排序算法——十大排序算法总结与对比

一、十大排序算法复杂度对比 二、关于排序算法的总结 1、基数排序仅仅适用于整型数的排序&#xff0c;一般不与另外的排序方法一起比较。 2、关于算法的稳定性&#xff1a;不稳定的算法有 “快希选堆”——快速排序&#xff0c;希尔排序&#xff0c;选择排序和堆排序。 3、关…

十大排序算法(面试必备)

目录 简单排序 1、冒泡排序 2、选择排序 3、插入排序 高级排序 4、希尔排序&#xff08;缩小增量排序&#xff09; 5、归并排序 6、快速排序 7、计数排序 8、堆排序 9、桶排序 10、基数排序 总结&#xff1a; 1、十大排序算法对比 2、基数排序、计数排序、桶排序…

十大排序算法学习

Sort 排序类算法是非常常见的算法&#xff0c;包括了比较类排序与非比较类排序 排序能够解决很多问题&#xff0c;有的编程语言也提供了一些排序算法函数&#xff08;比如C的sort&#xff09;但是掌握基本的排序算法原理以及写法仍然是很重要的&#xff0c;并且排序也是面试常…

十大排序算法(Java)

目录 1.冒泡排序 2.快速排序 3.插入排序 4.希尔排序 5.选择排序 6.堆排序 7.归并排序 8.计数排序&#xff1a;速度快&#xff0c;一般用于整数排序 9.桶排序 10.基数排序 1.冒泡排序 冒泡排序思路&#xff1a;&#xff08;两层for循环&#xff09; 比较相邻的元素。…