【ES】笔记-解构赋值

文章目录

    • 一、解构赋值
    • 二、解构数组
      • 1. 变量赋值
      • 2. 交换变量
      • 3. 默认值
      • 4. 不完全解构
      • 5. 解构数组嵌套
      • 6. 与...运算符结合使用
    • 三、解构对象
      • 1. 获取成员
      • 2. 对象赋值
      • 3. 默认值
      • 4. 解构嵌套对象
    • 四、解构函数
      • 1. 函数的参数
      • 2. 函数返回值
    • 四、其他解构
      • 1. 字符串
      • 3. 其他数据类型

一、解构赋值

  • 解构赋值:主要用来从数组和对象中提取值,对变量进行赋值。
  • []:是专门解构数组使用的
  • {}:是专门解构对象使用的

二、解构数组

1. 变量赋值

  • ES6之前的写法:
var a1 = 1,b1 = 2;
console.log(a1,b1)	// 1 2var a2,b2;
a2 = 11;
b2 = 22;
console.log(a2,b2)	// 11 22var arr = ['jack','rose'];
console.log(arr[0],arr[1])	// jack rose
12345678910
  • 解构赋值写法:
var [a1, b1] = [1, 2];
console.log(a1,b1)	// 1 2var a2,b2;
[a2, b2] = [11, 22];
console.log(a2,b2)	// 11 22var arr = ['jack','rose'];
var [a3,b3] = arr;
console.log(a3,b3)	// jack rose
12345678910
- 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。
1

2. 交换变量

  • ES6之前的写法:
var a=1,b=2,c;
c = a;
a = b;
b = c;
console.log('a='+a,'b='+b)	// a=2 b=1
12345
  • 解构赋值写法:
var a=1,b=2;
[a, b] = [b, a];
console.log('a='+a,'b='+b)	// a=2 b=1
123

3. 默认值

  • 如果解构不成功,变量的值就等于undefined
let [a] = [];
let [x, y] = [1];
console.log(a); // undefined
console.log(x); // 1
console.log(y); // undefined
12345
  • 可以在表达式左边的数组中为任意对象预设默认值。
  • 防止从数组中取出一个值为undefined的对象
let a, b, c, d;
[a=5, b=7] = [1];
[c,d] = [2]
console.log(a,b,c,d); // 1 7 2 undefined12345
  • 当数组成员为null的时候,默认值就不会生效
let [x = 1] = [undefined];
console.log(x);	// 1let [y = 1] = [null];
console.log(y); // null
12345

4. 不完全解构

  • 等号左边的模式,只匹配一部分的等号右边的数组。
  • 这种情况下,解构依然可以成功。
let [x, y] = [1, 2, 3];
console.log(x, y); // 1 2let [a, [b], c] = [1, [2, 3], 4];
console.log(a, b, c); // 1 2 4
12345

5. 解构数组嵌套

let arr = [1, [[2,22], 3]];
let [a,[b,c]] = arr;
console.log(a, b, c); // 1 [2,22] 3
123

6. 与...运算符结合使用

let [x, y] = [1, 2, 3];
console.log(x); // 1
console.log(y); // 2let [a, ...b] = [1, 2, 3];
console.log(a); // 1
console.log(b); // [2, 3]
1234567

三、解构对象

对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
如果变量与属性不同名,需要先匹配属性名,在定义变量。

  • 左边定义的变量名与右边对象的属性名相同时
let {x, y} = {x: 1, y: 2,}
// 相当于 {x: x, y: y} = {x: 1, y: 2,}
console.log(x, y)	// 1 2
123
  • 左边定义的变量名与右边对象的属性名不相时
let {x: a, y: b} = {x: 1, y: 2,}
// 此时x,y是用来匹配右边对象的属性名,a,b才是变量
console.log(a, b)	// 1 2
123

1. 获取成员

  • 解构赋值对可以用来提取 JSON 对象中的数据
const obj = {name : 'jack',age : 18,gender : '男'
}
let name = obj.name;
let age = obj.age;
let gender = obj.gender;
12345678
  • 解构赋值的方式从对象中获取成员
const obj = {name : 'jack',age : 18,gender : "男"
}
//前面的{}表示我要从obj这个对象中获取成员了
//name age gender 都得是 obj 中有的成员
//obj 必须是一个对象
let { name,age,gender } = obj;
123456789

2. 对象赋值

  • 声明后赋值
let obj = {a: 6, b: 4};
let {a, b} = obj;
console.log(a,b); // 6 4
123
  • 无声明赋值
let a, b;
({a, b} = {a: 1, b: 2});
console.log(a, b); // 1 2
123

3. 默认值

  • 指定对象的解构默认值。
let {a = 3} = {};
console.log(a) // 3let {b, c = 5} = {b: 1};
console.log(b, c) // 1 5let {d: e = 3} = {};
console.log(e) // 3let {f: g = 3} = {f: 5};
console.log(g) // 5
1234567891011
  • 当对象成员为null的时候
let [x = 22] = {x: undefined};
console.log(x);	// 22let [y = 1] = {y: null};
console.log(y); // null
12345

4. 解构嵌套对象

  • 与数组一样,解构也可以用于嵌套结构的对象。
let obj = {a: ['Hello',{ y: 'JavaScript' }]
};
let { a: [x, { y }] } = obj;
console.log(x, y); // Hello JavaScript
12345678
let obj = {a:{b:{x:1,y:2}}
}
let {a,a:{b},a:{b:{x,y}}} = obj;
console.log(a);	// {b: {…}}
console.log(b);	// {x: 1, y: 2}
console.log(x, y);	// 1 2
123456789101112

四、解构函数

1. 函数的参数

  • 函数的参数也可以使用解构赋值。
function fn([x, y]){return x + y;
}
fn([1, 2]); // 3
1234
  • 函数参数的解构也可以使用默认值。
function fn({x = 8,y} = {}) {console.log(x,y);return [x, y];
}
fn(); 				// [8, undefined]
fn({}); 			// [8, undefined]
fn({x: 9}); 		// [9, undefined]
fn({x: 6, y: 4});	// [6, 4]
12345678

2. 函数返回值

  • 当函数返回一个数组时,使用解构处理更方便
function fn() {return [1, 2];
}
let a, b;
[a, b] = fn();
console.log(a,b); // 1 2
123456
  • 忽略一个函数的某些返回值
function fn() {return [1, 2, 3];
}
let a, b;
[, b, c] = fn();
console.log(b, c); // 2 3
123456
  • 忽略一个函数的全部返回值
function fn() {return [1, 2, 3];
}
[ , , ] = fn();
1234

四、其他解构

1. 字符串

  • 字符串会被转换成了一个类似数组的对象。
let [a, b, c] = 'ES6';
console.log(a, b, c)	// E S 6
12
  • 字符串的length属性也能进行解构赋值
let {length : l} = 'ES6';
console.log(l) // 3
12

3. 其他数据类型

  • 当等号左边为对象,右边为 数值布尔值undefinednull
let {a1: b1} = 666;
console.log(b1);	// undefined
let {a2: b2} = true;
console.log(b2);	// undefined
let {a3: b3} = undefined;
console.log(b3);	// 报错
let {a4: b4} = null;
console.log(b4);	// 报错
12345678

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19、springboot引用配置属性或引用生成文件的属性或引用随机值

引用配置属性或引用生成文件的属性或引用随机值 ★ 使用占位符引用其他配置属性: 配置文件中可用${}占位符引用已有的属性,被引用的属性可以是: - 已定义的属性。 - 来自其他配置源(比如命令行的选项参数、环境变量、系统属性等…

SpringBoot项目上传至服务器

1.服务器安装JDK1.8 通过包管理器安装 2.服务器安装数据库 参考链接: CentOS 7 通过 yum 安装 MariaDB - 知乎 1. 安装之后没有密码,所以需要设置密码,使用下面的语句 set password for rootlocalhost password(111111); 2.在数据库中建…

07_Vue生命周期

Vue3生命周期 配置项的方式写Vue3生命周期 组合式API的方式写生命周期:写在setup里 如果同时用两种方式写生命周期钩子函数,组合式API里边的生命周期要比用配置项写的快一点。 注意:一般用一种方式即可。

概念解析 | MIMO雷达中正交波形设计的概述

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:MIMO雷达中正交波形设计的概述 参考资料:Sun H, Brigui F, Lesturgie M. Analysis and comparison of MIMO radar waveforms[C]//2014 International Radar Conference. IEEE, …

自建类ChatGPT服务:本地化部署与远程访问教程

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【python】绘图代码模板

【python】绘图代码模板 pandas.DataFrame.plot( )画图函数Seaborn绘图 -数据可视化必备主题样式导入数据集可视化统计关系散点图抖动图箱线图小提琴图Pointplot群图 可视化数据集的分布绘制单变量分布柱状图直方图 绘制双变量分布Hex图KDE 图可视化数据集中的成对关系 好看的图…

Python web实战之Django用户认证详解

关键词: Python Web 开发、Django、用户认证、实战案例 概要 今天来探讨一下 Django 的用户认证吧!在这篇文章中,我将为大家带来一些有关 Django 用户认证的最佳实践。 1. Django 用户认证 在开发 Web 应用程序时,用户认证是一个…

【ARM64 常见汇编指令学习 13 -- ARM 汇编 ORG 伪指令学习】

文章目录 ARM ORG 指令介绍UEFI 中对 ORG 指令的使用 ARM ORG 指令介绍 在ARM汇编中,"org"是一个汇编器伪指令,用于设置下一条指令的装入地址。"org"后面跟着的是一个表达式,这个表达式的值就是下一条指令的装入地址。如…

记录--基于css3写出的流光登录(注释超详细!)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 完整效果 对基本的表单样式进行设置 这里设置了基本的表单样式,外层用了div进行包裹,重点是运用了两个i元素在后期通过css样式勾画出一条线没在聚焦文本框的时候线会过度成一个…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报2

天气(自然现象) 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象,即某瞬时内大气中各种气象要素(如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能

使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能 在Unity中,Inspector窗口是一个非常重要的工具,它允许我们查看和编辑选定对象的属性。有时候,我们可能希望锁定Inspector窗口,以防止意外更改对象的属性。幸运的是&am…

Java语言 Iterator 如何装换成 List

迭代器如何逆向转换成List集合 在 Java 中,迭代器(Iterator)是一种用于遍历集合中元素的对象,它提供了一种简单而一致的方式来访问集合中的元素,而不需要暴露集合内部的结构。如果我们需要将一个迭代器逆向转换成 Lis…

MongoDB 6.0.8 安装配置

一、前言 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 将数据存储为一个文档,数据结构由键值(key>value…

阿里云“通义千问”开源,可免费商用

我是卢松松,点点上面的头像,欢迎关注我哦! 阿里云成为国内首个加入大模型开源行列的大型科技企业。就在昨天,阿里云公开表态,把自家的通义千问大模型开源。 阿里云把通用70亿参数模型,包括Qwen-7B和对话模…

《Web安全基础》03. SQL 注入

web 1:简要 SQL 注入2:MySQL 注入2.1:信息获取2.2:跨库攻击2.3:文件读写2.4:常见防护 3:注入方法3.1:类型方法明确3.2:盲注3.3:编码3.4:二次注入3…

阿里云国际站账号OSS购买了资源包为什么还会欠费?

购买资源包后还会欠费的原因 1、资源包无法抵扣所有扣费项目 OSS的计费项包括存储费用、流量费用、请求费用、数据处理费用、对象标签费用、传输加速费用,而目前资源包只提供标准(LRS)存储包、低频(LRS)存储包、归档&a…

如何打造属于自己的个人IP?

在当今信息爆炸的时代,个人 IP 已经成为人们在网络世界中的独特标签。无论是在职场上、创业中,还是在社交生活中,拥有个人 IP 的人都能脱颖而出,吸引更多的关注和机会。那么,如何打造属于自己的个人 IP 呢?…

DSP 28335 学习笔记

对DSP进行开发时,需要对其底层的硬件及外设进行相应的配置,当配置完成后才可以将其相应模块激活,才可以在其内部进行程序编写及调试处理。下面对程序配置及操作进行简单的整理,仅供参考。 第一步:初始化系统控制&…

php 适配器模式

一,适配器模式,属于结构设计模式的一种,用于将一个类的接口转换成客户期望的接口。 1,目标接口(Target Interface):是客户期望的接口,定义了客户要调用的方法。 2,适配器…

阿里云率先荣获容器集群稳定性先进级认证

7 月 25 日,由中国信通院发起的“2023 稳保体系”评估结果在可信云大会现场公布,阿里云容器服务 ACK 成为首批通过“云服务稳定运行能力-容器集群稳定性”评估的产品,并荣获“先进级”认证。 云原生技术正在激活应用构建新范式,构…