参考

阮一峰 – 变量的解构赋值

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. 适用于PyTorch 2.0.0的Ubuntu 22.04上CUDA v11.8和cuDNN 8.7安装指南

    将下面内容保存为install.bash,直接用shell执行一把梭解决 #!/bin/bash ### steps #### # verify the system has a cuda-capab ...

  2. php.ini文件与php.d

    `php.ini` 是 PHP 的主要配置文件,用于全局配置 PHP 的行为和功能.它包含了许多 PHP 的核心设置,如内存限制.错误报告级别.扩展加载等. `php.ini` 文件通常位于 PHP ...

  3. oeasy教您玩转vim - 43 - # 替换模式

    ​ 替换模式 回忆上节课内容 上次我们学到的最有用的就是c 他和d的区别就是删除之后进入到插入模式 c可以配合motion 可以用ciw来快速删除当前光标所在的单词 可i和a 配合的文字块 w wor ...

  4. oeasy教您玩转vim - 89 - # 高亮细节Highlight

    ​ 高亮细节 highight 回忆 这个自动命令 autocmd 还是很方便的 打开时.保存时就会有自动执行的操作 自动命令有这么几大元素 {event} 触发事件 {pattern} 文件模式 { ...

  5. 第一作者解读|我们这篇Nature Communication背后的故事

    2024年7月16日,大暑将至,立秋不远.我们基于Python的转录组学全分析框架的文章--"OmicVerse: a framework for bridging and deepenin ...

  6. 【郝斌C ST】01

    自学视频<郝斌C语言自学教程> 01 -  09: https://www.bilibili.com/video/BV1os411h77o 1.为什么学习C语言? - C的起源和发展 第一 ...

  7. python数据分析与可视化基础

    一.数据分析介绍:1.数据分析含义:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用.数据分析是为了提取有用信息和形成 ...

  8. 多智能体路径规划问题 —— Learn all about Multi-Agent Path Finding (MAPF)

    地址: http://mapf.info/index.php/Main/Publications 与其对应的实验室地址: https://www.movingai.com/

  9. AI的技术发展:记忆与想象力 —— 【人工智能】记忆、想象与AI | 查兰·兰加纳特 | 心理学与神经科学家 | 人脑如何记忆 | 内部模型 | 稳定可塑性难题 | 想象力的由来 | AI内容传播 | 脑机接口BCI

    原文地址: https://www.youtube.com/watch?v=cHYKbVP1GTQ 加利福尼亚大学戴维斯分校教授.心理学家兼神经科学家查兰·兰加纳特Charan Ranganath,最 ...

  10. 强化学习中atari游戏环境下帧的预处理操作

    在网上找到一个Rainbow算法的代码(https://gitee.com/devilmaycry812839668/Rainbow),在里面找到了atari游戏环境下帧的预处理操作. 具体代码地址: ...