解构赋值定义:

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

数组的解构赋值

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

基本用法

    // 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. vue基本操作[2] 续更----让世界感知你的存在

    Vue文件解析 什么是<template/>标签 template是html5新元素,主要用于保存客户端中的内容,表现为浏览器解析该内容但不渲染出来,可以将一个模板视为正在被存储以供随后在 ...

  2. Bash 内建命令

    官方文档 Bash内建命令 查看命令是否为Bash内建命令

  3. go语言全景俯瞰

    本篇是语言教学的"传统项目".每个写go语言教学的人,都会介绍它的发展历程,应用领域,优缺点和特点来介绍自己的理由.当然如果你有自己的理解,那就更好了,欢迎讨论! 全景简介 go语 ...

  4. Cilium系列-9-主机路由切换为基于 BPF 的模式

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  5. 使用lame以多进程方式转码wav为mp3

    前言 lame以单进程的方式转码wav文件,之前量少,足够使用.如今每日wav文件数量极多,单进程的效率就不够用了,所以这里使用脚本的方式,启动多个lame进程转码wav文件. code01: aut ...

  6. [故障处理]WindowsServer休眠后黑屏

    情况 Windows Server 2016休眠后无法被远程桌面,现场连接显示器也是黑屏.直连显示器的情况下,有时候长按 ctrl键能亮屏. 处理步骤 先扫描是否有系统文件损坏:Dism /Onlin ...

  7. SpringBoot3进阶用法

    标签:切面.调度.邮件.监控: 一.简介 在上篇<SpringBoot3基础>中已经完成入门案例的开发和测试,在这篇内容中再来看看进阶功能的用法: 主要涉及如下几个功能点: 调度任务:在应 ...

  8. Job System 初探

    作者:i_dovelemon 日期:2023-08-24 主题:Fiber, Atomic Operation, MPMC Queue, Multiple thread, Job system 引言 ...

  9. LeetCode952三部曲之二:小幅度优化(137ms -> 122ms,超39% -> 超51%)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<LeetCode952三部曲& ...

  10. 全景VR KRPano项目打包成安卓APP快速简易教程

    有时候,我们可能不想把我们制作的全景VR项目发布到网站上,而是想把它作为一个手机应用来使用或者分享.这样,我们就可以更好地保护我们的作品,也可以更方便地展示给客户或者朋友.本文将介绍一种简单的方法,让 ...