参考

阮一峰 – 变量的解构赋值

Array Destructuring Assignment

old school

const items = [1, 2, 3];
const item1 = items[0];
const item2 = items[1];
const item3 = items[2];

一个一个从 array 拿出来, 再一个一个 assign 给每一个变量.

modern

const [item1, item2, item3] = [1, 2, 3];

一行里面做了 declare, assign, read from array. 3 个动作一气呵成.

get someone

const [, , value3] = [1, 2, 3];

with default value

const [v1] = []; // v1 = undefined
const [v1 = 'default value'] = []; // v1 = 'default value'
const [v1 = 'default value'] = ['value']; // v1 = 'value'

Object Destructuring Assignment

它和 Array 的用法差不多

const person = { name: 'Derrick', age: 11 };
const { name, age } = person;

with alias 别名

const person = { name: 'Derrick', age: 11 };
const { name: newName, age: newAge } = person;
console.log(newName);
console.log(newAge);

name: newName 中间使用了分号

with default value

const { name = 'Derrick', age } = {};
// name = 'Derrick'
// age = undefined

nested

解构支持嵌套哦,

document.dispatchEvent(
new CustomEvent('myevent', {
detail: {
tabName: 'tab name',
},
})
);

监听时解构获取 tabName

document.addEventListener('myevent', ({ detail: { tabName } }) => {
// do something...
});

Common Use Case

上面的例子解构以后都被赋值到变量, 这个是最 common 的用法.

但其实你要 assign 到哪里都是可以的哦.

assign to parameters

function method1([v1, v2]) {
console.log(v1);
console.log(v2);
}
method1(['value1', 'value2']); function method2({ name, age }) {
console.log(name);
console.log(age);
}
method2({ name: 'Derrick', age: 11 });

assign to existing variables (swap value)

let v1 = 1;
let v2 = 2;
[v1, v2] = [v2, v1];
console.log(v1); // 2
console.log(v2); // 1

Mix cost and let when using destructuring assignment

参考: stackoverflow – How to mix const and let when using object or array destructuring assignment in ES6?

在 C# 可以这样 mix 着写

在 JS 则不行, 如果是要 declare const 或 let 那么就必须全部都是一样的, 同理如果是要 assign to exsiting variables 必须全部都是 existing.

解决方案就是多写几个 destructuring assignment 咯.

const array = [1, 2, 3];
let existingValue = 1;
[existingValue] = array;
const [, value2] = array;
let [, , value3] = array;

是不是有一种, 一个一个写更好的感觉...哈哈

JavaScript – 解构赋值 Destructuring Assignment的更多相关文章

  1. 解构赋值 Destructuring Assignment

    解构赋值 Destructuring Assignment ES6中可以通过一定的模式将数组或对象中的值直接赋值给外部变量,称为解构 对象的解构赋值 // 在ES5中,当需要获取一个对象中的变量值的时 ...

  2. ES6新特性:利用解构赋值 (destructuring assignment), 简化代码

    本文的Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法----babel的安装和使用 : 解构赋值是一种表达式, 利用这种新语法, 可以直接从数组或者对象中快速提取值 赋值给不 ...

  3. ECMAScript 6的解构赋值 ( destructuring assignment)

    var provinceValues=["010","020","028","0755","023" ...

  4. JavaScript解构赋值

    JavaScript解构赋值 JavaScript解构赋值为我们提供了很多方便,但是用法比较多,本文就来梳理一下.总体来说,主要就两种地方使用解构赋值,一种是数组的解构赋值,另一种是对象的解构赋值.以 ...

  5. JavaScript学习笔记(八)——变量的作用域与解构赋值

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  6. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值

    1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...

  7. ES6解构赋值详解

    文章转载自:http://www.zhufengpeixun.cn/article/167 解构赋值(destructuring assignment)语法是一个 Javascript 表达式,这种语 ...

  8. ES6--变量的声明及解构赋值

    ​ ES6的目标是使得JavaScript语言能够用来编写大型的复杂的应用程序.成为企业级开发语言:该标准已于2015年6月17日正式公布. 可是真正的普及我觉得还得须要一段时间.然而这并非理由让我们 ...

  9. [ES6系列-03]ES6中关于参数相关特性详解(参数默认值与参数解构赋值与剩余参数)

    [原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 今天总结一下 ES6 中跟参数相关的内容. 欢迎补充斧正.留言交流. 让我们互相学习一起进步. 1. ES6 参数默认值( ...

  10. 变量的解构赋值////////////z

    变量的解构赋值 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号问题 用途 数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值, ...

随机推荐

  1. oeasy教您玩转python - 008 - # ascii码表

    ​ ASCII 码表 回忆上次内容 通过 help()可以从 python 命令行模式进入到帮助模式 通过 q 退出 ord(c)和 chr(i) 这是俩函数 这俩是一对,相反相成的 ord 通过字符 ...

  2. 记一次 redis 事件注册不当导致的内存泄露

    线上的程序跑着跑着内存越来越大,并且没有下降的趋势,重启一下程序也只能短暂恢复.通过 htop 命令再按一下 M 键按内存占用大小排个序,程序会占好几个G.那好,让我们来分析一下. 收集dump 通过 ...

  3. Python shortuuid生成库学习小结

    shortuuid生成库学习小结 by:授客 QQ:1033553122 实践环境 win10 Python 3.5.4 shortuuid-1.0.1-py3-none-any.whl 下载地址: ...

  4. 单细胞测序最好的教程(十):细胞类型注释迁移|万能的Transformer

    作者按 本章节主要讲解了基于transformer的迁移注释方法TOSICA,该算法在迁移注释上达到了SOTA的水平,在注释这么卷的赛道愣是杀出了一条血路.本教程首发于单细胞最好的中文教程,未经授权许 ...

  5. 移植自淘宝店家的,硬件SPI通讯3.5寸TFT,LCD屏幕。MSPM0G3507

    适用MSPM0G3507 LP开发板 3.5寸TFTLCD屏,SPI通讯 项目是CCStheia的 特点:硬件SPI,速度更快,可以在syscfg中自行修改引脚 蓝奏云: https://wwo.la ...

  6. macOS 常用键盘快捷键

    macOS 常用键盘快捷键大全 - 最值得你记住的 Mac 常用快捷键组合 Pertim 与 Windows 的差异 一切开始前,我们先来认识一下苹果 Mac 键盘上几个陌生的按键,比如 ⌘ (Com ...

  7. 我用Awesome-Graphs看论文:解读X-Stream

    X-Stream论文:<X-Stream: Edge-centric Graph Processing using Streaming Partitions> 前面通过文章<论文图谱 ...

  8. 【C3】02 操作总览

    在这篇文章中,我们将会拿一个简单的HTML文档做例子,并且在上边使用CSS样式,期待你能在此过程中学会更多有关CSS的实战性知识. 前置知识 在开始本单元之前,您应该: 基本熟悉计算机操作. 基本工作 ...

  9. 【Oracle】Windows-19C 下载安装

    下载 Download 官网下载地址[需要Oracle账号]: https://www.oracle.com/database/technologies/oracle-database-softwar ...

  10. 【Java-GUI】03 事件监听

    --1.监听机制案例 简答理解:操作驱动程序执行 完整的操作体系:事件源.事件.监听器.注册监听 案例: 点击OK按钮,让上方的输入框写入一段字符 package cn.dzz; import jav ...