返回顶部
首页 > 资讯 > 前端开发 > JavaScript >一篇文章带你了解JavaScript的解构赋值
  • 639
分享到

一篇文章带你了解JavaScript的解构赋值

2024-04-02 19:04:59 639人浏览 独家记忆
摘要

目录1. 什么是解构赋值 ?2. 数组的解构赋值2.1) 数组解构赋值的默认值2.2) 数组解构赋值的应用类数组中的应用交换变量的值3. 对象的解构赋值

1. 什么是解构赋值 ?

将属性/值从对象/数组中取出,赋值给其他变量

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

让我们通过一个例子看看:

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

在这里插入图片描述

将数组的值获取出来,赋值给abc

2. 数组的解构赋值

模式(结构)匹配

即左边与右边的结构相同 (如左边是数组,右边也要是数组)

索引值相同的完成赋值

即左边与右边的索引值相同的完成赋值

通过例子来理解一下:

对于第一个:

let [e, [ , , f], g] = [1, [2, 4, 5], 3]; // 可以正确输出
console.log(e, f, g);  

在这里插入图片描述

但是如果写成这样,则会报错。

let [e, [ , , f], [g]] = [1, [2, 4, 5], 3];
console.log(e, f, g);

在这里插入图片描述

因为左边与右边的结构不匹配,右边索引为 2 的地方是个 3,而左边是个数组,无法完成匹配。

对于第二个

let [, a, ] = [1, 2, 3];
console.log(a);

索引值相同的完成赋值,a的索引值是 1,对应右边索引值为 1 的值是 2,所以a = 2

2.1) 数组解构赋值的默认值

const [a, b] = [];console.log(a, b);

在这里插入图片描述

当左边对应的索引在右边为undefined时(如右边不存在这个值的情况),此时赋值的是undefined

那我们如何修改这个赋值呢 ?

通过在左边给变量写个 = 想要的值,即默认值。

所以,当左边的值=== undefined时,如果有默认值,左边的值会等于默认值

const [a = 1, b = 2] = [];
console.log(a, b);

在这里插入图片描述

2.2) 数组解构赋值的应用

类数组中的应用

比如arguments中的应用

arguments中的值提取出来

function fun() {
    const [a, b, c] = arguments;
    console.log(a, b);
}

fun(1, 2, 3, 4);

在这里插入图片描述

比如nodeList中的应用

在这里,将p元素提取出来

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta Http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>解构赋值的应用</title>
</head>
<body>
    <p>one</p>
    <p>two</p>
    <p>three</p>
    <script>
    	// 利用数组解构赋值将 p 元素获取的同时解构出来
    	const [p1, p2, p3] = document.querySelectorAll('p');
    	console.log(p1, p2, p3);
	</script>
</body>
</html>

在这里插入图片描述

交换变量的值

let a = 1, b = 2;
[a, b] = [b, a]; // 相当于 [a, b] = [2, 1];
console.log(a, b);

在这里插入图片描述

3. 对象的解构赋值

模式(结构)匹配

即左边与右边的结构相同 (如左边是对象,右边也要是对象)

属性名相同的完成赋值

即左边与右边的属性名相同的完成赋值

通过例子来理解一下:

const {val, objName} = {objName: "object", val: 1};
console.log(objName, val);

在这里插入图片描述

属性名相同的完成赋值,不用管左边属性名出现的顺序是否与右边出现的顺序一致。

这里还可以这么写,给新的变量名赋值:

const {val: vvv, objName: objnnn} = {objName: "object", val: 1};
console.log(objnnn, vvv);

在这里插入图片描述

3.1) 对象解构赋值的默认值

与数组解构赋值类似

对象的属性值=== undefined时,如果有默认值,等于对应的默认值

const {age: val = 18} = {};
console.log(val);

在这里插入图片描述

3.2)对一个已声明的变量解构赋值

在数组中,我们可以直接这么写:

let a, b;
[a, b] = [1, 2];
console.log(a, b);

在这里插入图片描述

但是,在对象中,直接这么写则会报错

let a, b;
{a, b} = {a: 1, b: 2};
console.log(a, b);

在这里插入图片描述

因为在这里,左边的花括号,浏览器会把它当成是一个代码块。

那么,我们如何解决这个问题呢 ?

在外面加个圆括号

let a, b;
({a, b} = {a: 1, b: 2});
console.log(a, b);

在这里插入图片描述

除此之外,对象的解构赋值可以取到继承的属性!

4. 字符串的解构赋值

可以用数组和对象的形式进行结构赋值

const [a, b] = "Hello";
// 左边对象的属性名对应右边字符串的字符下标序号
const {2: c, 4: e} = "Hello";
console.log(a, b, c, e);

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 一篇文章带你了解JavaScript的解构赋值

本文链接: https://lsjlt.com/news/163618.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一篇文章带你了解JavaScript的解构赋值
    目录1. 什么是解构赋值 ?2. 数组的解构赋值2.1) 数组解构赋值的默认值2.2) 数组解构赋值的应用类数组中的应用交换变量的值3. 对象的解构赋值...
    99+
    2024-04-02
  • 一篇文章带你了解JavaScript-对象
    目录创建对象对象直接量通过new创建对象原型Object.create()属性的查询和设置继承属性访问错误删除属性检测属性序列化对象总结创建对象 对象直接量 对象直接量是由若干名/值...
    99+
    2024-04-02
  • 一篇文章带你了解JavaScript-语句
    目录表达式语句复合语句和空语句复合语句空语句声明语句varfunction条件语句ifif/elseelse ifswitch循环whiledo/whileforfor/in跳转标签...
    99+
    2024-04-02
  • 一篇文章带你详细了解JavaScript数组
    目录一、数组的作用:二、数组的定义:1.通过构造函数创建数组2.通过字面量的方式创建数组三、数组元素四、数组长度五、数组索引(下标)六、数组注意的问题1.数组中存储的数据可以是不一样...
    99+
    2024-04-02
  • 一篇文章带你了解JavaScript的包装类型
    目录1、简介2、String1、创建语法2、常用方法3、更多方法3、Number1、语法2、属性3、常用方法4、Boolean总结1、简介 【解释】: 在 JavaScri...
    99+
    2024-04-02
  • 一篇文章带你了解Spring AOP 的注解
    目录1、xml 的方式实现 AOP①、接口 UserService②、实现类 UserServiceImpl③、切面类,也就是通知类 MyAspect④、AOP配置文件 applic...
    99+
    2024-04-02
  • 一篇文章带你了解初始Spring
    目录为什么要使用SpringSpring概述Spring容器使用流程1.启动容器2.完成bean的初始化3.注册bean到容器中4.装配bean的属性bean的注册bean属性注入总...
    99+
    2024-04-02
  • 一篇文章带你了解XGBoost算法
    目录1. 什么是XGBoost1.1 XGBoost树的定义1.2 正则项:树的复杂度1.3 树该怎么长1.4 如何停止树的循环生成2. XGBoost与GBDT有什么不同3. 为什...
    99+
    2024-04-02
  • 一篇文章带你了解Java Stream流
    目录一、Stream流引入现有一个需求:1.用常规方法解决需求2.用Stream流操作集合,获取流,过滤操作,打印输出二、Stream流的格式三、获取流四、Stream流的常用方法方...
    99+
    2024-04-02
  • 一篇文章带你了解Java SpringBoot Nacos
    目录1、什么是Nacos 1.1与eureka对比1.2与zookeeper对比1.3与springcloud config 对比 2、Spring Cloud Alibaba 套件...
    99+
    2024-04-02
  • 一篇文章带你了解vue路由
    目录概念Vue Router简介Vue Router的特性Vue Router的使用步骤分类嵌套路由动态路由命名路由编程式导航总结概念 路由的本质就是一种对应关系,比如说我们在url...
    99+
    2024-04-02
  • 一篇文章带你了解jQuery动画
    目录1.控制元素的显示与隐藏 show() hide()2.控制元素的透明度 fadeIn() fadeOut()3:控制元素的高度 slideUp() slideDown()总结 ...
    99+
    2024-04-02
  • 一篇文章带你了解Python中的类
    目录1、类的定义2、创建对象3、继承总结1、类的定义 创建一个rectangle.py文件,并在该文件中定义一个Rectangle类。在该类中,__init__表示构造方法。其中,s...
    99+
    2024-04-02
  • 一篇文章带你了解C语言的选择结构
    目录一、if-else语句1.单选择 2.双选择3.多选择二.switch语句总结一、if-else语句 1.单选择 单选择通过if语句就可以实现,if语句的语法及执行流程...
    99+
    2024-04-02
  • 一篇文章带你了解SpringBoot Web开发
    目录SpringBoot Web开发静态资源定制首页thymeleaf模板引擎1、导入依赖2、controller书写源码分析Thymeleaf语法基本语法:MVC配置原理总结Spr...
    99+
    2024-04-02
  • 一篇文章带你了解清楚Mysql 锁
    一丶为什么数据库需要锁 数据库锁设计的初衷是处理并发问题。作为多用户共享 的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实 现这些访问规则的重要数据结构。 根据加锁的范围,mysql 里面...
    99+
    2022-11-29
    mysql锁机制 mysql锁机制应用场景 mysql锁表和解锁语句
  • 一篇文章带你了解C++的KMP算法
    目录KMP算法步骤1:先计算子串中的前后缀数组NextC++代码:步骤2:查找子串在母串中出现的位置。总结KMP算法 KMP算法作用:字符串匹配 例如母串S = “aaagoogle...
    99+
    2024-04-02
  • 一篇文章带你了解C++中的异常
    目录异常抛出异常基本操作自定义的异常类栈解旋异常接口声明异常变量的生命周期异常的多态c++的标准异常库编写自己的异常类总结异常 在c语言中,对错误的处理总是两种方法: 1,使用整型的...
    99+
    2024-04-02
  • 一篇文章带你了解mybatis的动态SQL
    目录1、动态SQL:if 语句3、动态SQL:if+set 语句4、动态SQL:choose(when,otherwise) 语句5、动态SQL:trim 语句6、动态SQL: SQ...
    99+
    2024-04-02
  • 一篇文章带你了解JAVA结构化编程详情
    目录1.什么是结构化编程2.为什么要使用结构化编程?3.三大结构A. 循环结构一行代码:B. 分支结构C.重复结构4.函数(在JAVA中叫方法)总结1.什么是结构化编程 编...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作