参考

阮一峰 – 变量的解构赋值

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. 面试官:Dubbo一次RPC请求经历哪些环节?

    大家好,我是三友~~ 今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程. 本文是基于Dubbo3.x版本进行讲解 一个简单的Demo 这里还是老样子,为了保证文章的完整性和连贯性,方 ...

  2. Netcode for Entities如何添加自定义序列化,让GhostField支持任意类型?以int3为例(1.2.3版本)

    一句话省流:很麻烦也很抽象,能用内置支持的类型就尽量用. 首先看文档.官方文档里一开头就列出了所有内置的支持的类型:Ghost Type Templates 其中Entity类型需要特别注意一下:在同 ...

  3. Linux安全启动及Machine Owner Key(UEFI BIOS MBR GPT GRUB)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   无 前言   只要装过各种系统的人都或多或少会接触 ...

  4. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-58 - 文件下载

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  5. Mysql函数10-IF

    IF函数用于判断条件是否成立,成立则执行命令1,不成立则执行命令2. 1.sql查询出一列create_time select create_time from goods where id=65 2 ...

  6. 【ELK】Kibana-7.13.1版本 启动报错 Centos6

    报错信息: [root@centos6-1 gcc-4.8.2]# /opt/kibana-7.13.1-linux-x86_64/bin/kibana /opt/kibana-7.13.1-linu ...

  7. 【Maxwell】03 定向监听&全量输出

    一.定向监听 定向监听,即只监听某一个特定的表,或者库 1.创建样本案例 -- 创建监听的库(演示样本) CREATE DATABASE `test-db-2` CHARACTER SET 'utf8 ...

  8. FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP

    ​一年一度的毕业季就要到了,毕业设计算是大学生毕业前的最后一个大作业,尤其是计算机相关专业的毕业设计,通常要通过编程开发一个软件,比如开发一个图书馆管理系统,开发一个电商APP等等. 一个好的毕业设计 ...

  9. python科学计算:加速库numba —— 安装和试用

    安装(anaconda环境下) conda install numba Demo代码: from numba import jit from numpy import arange import nu ...

  10. WSL启动nvidia-docker镜像:报错libnvidia-ml.so.1- file exists- unknown

    参考: https://blog.csdn.net/xujiamin0022016/article/details/124782913 https://zhuanlan.zhihu.com/p/361 ...