解构赋值定义:

允许按照一定模式从数组或对象中提取值,然后对变量进行赋值。

数组的解构赋值

注:数组的元素要一次排序的,变量的值由他的位置决定。

基本用法

    // ES6 解构赋值
let [a, b, c] = [1, 2, 3]; // 等于
let a = 1;
let b = 2;
let c = 3;

如果结构不成功,变量的值就是undefined。

    let [x, y, z] = [1, 2];
// x = 1;
// y = 2;
// z = undefined; 结构没有成功,值就是undefined;

如果等号右边不是数组(不具有Iterator),是会报错的。比如下面语句就会报错:

    let [a] = 1;
let [a] = false;
let [a] = NaN;
let [a] = undefined;
let [a] = null;
let [a] = {};

事实上只要某种数据结构具有 Iterator 接口,都可以使用数组形式的解构赋值。

    let [x, y, z, a] = new Set([1, 2, 3]);
x // 1
y // 2
z // 3
a // undefined

指定默认值

    let [a, b = 2] = [1]; // a=1,b=2。b=2为默认值

    let [a = 1, b = a] = [2]; //a=2,b=2。a=1为默认值,后被赋值为 2,a的值又被赋值为 b,所以b=2。

    let [a = b, b = 1] = [2]; //a=2,b=1。b=1为默认值。

    // 下面这种方式报错
let [a = b, b = 1] = []; // 不先给 a 赋值会报错,因为未给 a 赋值。要先给 a 赋值。

对象的解构赋值

注:对象的属性没有次序,变量必须与属性同名才能取得正确的值。

    let { x, y } = { x: "a", y: "b" };
x // "a"
y // "b" let { z } = { x: "a", y: "b" };
z // undefined

如果变量名与属性名不一致,要写成下面这样:

    var { a: x } = { a: "1", b: "2" }
x // "1",a=undefined let { first: f, last: l } = { first: "hello", last: "world" };
f // "hello"
l // "world"

就是说对象的解构赋值的内部机制是先找到相同名称的属性,然后赋值给变量,真正被赋值的是后者,不是前者。

字符串的解构赋值

字符串用于解构赋值时,字符串会被转换成一个类似数组的对象。

    let [a, b, c, d, e] = "hello";
a // "h"
b // "e"
c // "l"
d // "l"
e // "0" // 类似数组的对象都会有一个length属性,可以这样写
let { length: len } = "hello";

参考书籍:

《ES6标准入门(第3版)》 阮一峰 著

JavaScript(ES6):变量的解构赋值的更多相关文章

  1. ES6 变量的解构赋值

    数组的解构赋值     var [a,b,c] = [1,2,3];    左边是变量,右边是值,根据数据结构一一对应 只要等号两边的模式相同,左边的变量就会被赋予右边对应的值,必须模式相同 如果等号 ...

  2. ES6 - 变量的解构赋值学习笔记

    变量的解析赋值 数组的解析赋值 es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这就称为解构. var a = 1; var b = 2; var c = 3; //在es6中允许写成 ...

  3. es6变量的解构赋值学习笔记

    1. 解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象.由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错. let { prop: x } = undefin ...

  4. ES6变量的解构赋值

    变量的解构赋值 1.数组的解构赋值 2.对象的解构赋值 3.字符串的解构赋值 4.数值和布尔值的解构赋值 5.函数参数的解构赋值 6.圆括号问题 7.用途 1.数组的解构赋值 ES6 允许写成下面这样 ...

  5. es6—变量的解构赋值

    数组的解构赋值 ]]]]]]] = []}} = {}} = {}})]: first]: last} = arr} = {}) {}))}))}) {}))}))].]]]])})] }}} = { ...

  6. ES6变量的解构赋值(一)数组的解构赋值

    let[a,...arr]=[1,2,3,4];//a==>1 arr==>[2,3,4] let [x, y, ...z] = ['a'];//a==>'a' y==>und ...

  7. ES6变量的解构赋值(二)对象的解构赋值

    前面我们知道,数组的结构赋值需要按顺序进行赋值, let [a,,c] = [,,] console.log(a); console.log(c);//3 let [a,b] = [1];consol ...

  8. ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值

    ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...

  9. ES6学习之变量的解构赋值

    前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...

  10. ES6标准入门 第三章:变量的解构赋值

    解构赋值:从数组和对象中提取值,对变量进行赋值. 本质上,这种写法属于“匹配模式”:只要等号两边的模式相同,左边的变量就会被赋予对应的值. 1.数组的结解构赋值 基本用法 let [foo, [[ba ...

随机推荐

  1. 在映客的虚拟KTV里唱了一首“爱你”

      如果你突然打了个喷嚏 那一定就是我在想你 如果半夜被手机吵醒 啊~那是你的虚拟 KTV 在响起 2022 年 5 月 18 日,映客 App 上线了业内首个元宇宙 K 歌玩法「全景 K 歌」,给用 ...

  2. CS144 LAB5~LAB6

    CS144 lab5~6 最后两个lab了,虽然很多大佬都说剩下的两个lab比起TCP的实现,"简直太简单了",但是我认为做这两个之前需要补充一些额外的网络知识,不然直接上手去做的 ...

  3. 文心一言 VS 讯飞星火 VS chatgpt (65)-- 算法导论6.5 4题

    四.在 MAX-HEAP-INSERT 的第 2行,为什么我们要先把关键字设为 -∞ ,然后又将其增加到所需的值呢? 文心一言: 在 MAX-HEAP-INSERT 算法的第二行将关键字设为 -∞,是 ...

  4. PHP插件

  5. Selenium+2Captcha 自动化+验证码识别实战

    本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解.内容涵盖Selenium的基础知识.验证码的分类.2Captcha服务的使用,以及 ...

  6. 常用c++ STL 汇总

    常用STL: vector 变长数组,倍增的思想 初始化: //初始化 vector<int> a; vector<int> a(n); vector<int> a ...

  7. http头部字段Origin和Access-Control-Allow-Origin解决请求跨域

    Http协议中请求头和响应头携带了很多信息,其中 请求头 Origin,响应头 Access-Control-Allow-Origin 与跨域有关. 为了验证跨域,要将客户端和服务端分配在不同端口,这 ...

  8. [Python]树基础

    关于树 树是一种数据结构,由n个有限节点组成的一个具有层次关系的集合.二叉树则是每个节点最多有两个子树的树结构.二叉树一般有以下性质: 二叉树第k层上的节点数目最多为 \(2^{k-1}\) 深度为 ...

  9. SpringBoot3分库分表

    标签:ShardingSphere5.分库.分表: 一.简介 分库分表的设计和实现方式,在之前的内容中总结过很多,本文基于SpringBoot3和ShardingSphere5框架实现数据分库分表的能 ...

  10. Vu3+Element-Plus根据路由配置生成菜单导航栏

    先看效果,整体界面结构如下 点击左侧菜单栏,右侧切换显示不同页面内容. Vue3使用路由–南河小站 1 路由配置 路由配置如下: const routes = [ { path: "&quo ...