Javascript中的解构赋值语法详解


Posted in Javascript onApril 02, 2021

前言

首先在 ES6中引入的“解构赋值语法”允许把数组和对象中的值插入到不同的变量中。虽然看上去可能很难,但实际上很容易学习和使用。

解构赋值语法是一种 JS表达式。ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。

在ES6解构赋值出现之前,我们需要为变量赋值的时候,只能直接指定值。

比如:

let a = 1;
let b = 2;
let c = 3;
let d = 4;
let e = 5;

数组解构非常简单。你所要做的就是为数组中的每个值声明一个变量。你可以定义更少的变量,而不是数组中的索引(即,如果你只想解处理前几个值),请跳过某些索引或甚至使用 REST 模式将所有剩余的值放到新数组中。

const nums = [ 3, 6, 9, 12, 15 ];
const [
 k,    // k = 3
 l,    // l = 6
 ,    // Skip a value (12)
 ...n   // n = [12, 15]
] = nums;

对象解构

对象解构与数组解构非常相似,主要区别是可以按名称引用对象中的每个key,从而创建一个有相同名称的变量。此外还可以将键解构为新的变量名,只解构所需的 key,然后用 rest 模式将剩余的 key 解构为新对象。

const obj = { a: 1, b: 2, c: 3, d: 4 };
const {
 a,       // a = 1
 c: d,      // d = 3
 ...rest     // rest = { b: 2, d: 4 }
} = obj;

嵌套解构

嵌套对象和数组可以通过相同的规则来进行解构。区别在于可以将嵌套 key 或值直接解构为变量,而不必将父对象存储在变量本身中。

const nested = { a: { b: 1, c: 2 }, d: [1, 2]};
const {
 a: {
  b: f,     // f = 1
  ...g     // g = { c: 2 }
 },
 ...h      // h = { d: [1, 2]}
} = nested;

高级解构

由于数组的行为与对象相似,所以可以通过使用索引作为对象解构分配中的 key,用解构分配语法从数组中获取特定值。用这种方法还可以得到数组的其他属性(例如数组的 length)。最后,如果解构后的值是 undefined,则还可以为解构过程中的变量定义默认值。

const arr = [ 5, 'b', 4, 'd', 'e', 'f', 2 ];
const {
 6: x,      // x = 2
 0: y,      // y = 5
 2: z,      // z = 4
 length: count, // count = 7
 name = 'array', // name = 'array' (not present in arr)
 ...restData   // restData = { '1': 'b', '3': 'd', '4': 'e', '5': 'f' }
} = arr;

总结

到此这篇关于Javascript中解构赋值语法的文章就介绍到这了,更多相关JS解构赋值语法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
关于 文本框默认值 的操作js代码
Jan 12 Javascript
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
jquery对象和DOM对象的区别介绍
Aug 09 Javascript
单击某一段文字改写文本颜色
Jun 06 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
vuex实现购物车功能
Jun 28 Javascript
vue页面引入three.js实现3d动画场景操作
Aug 10 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 Javascript
Ajax实现局部刷新的方法实例
前端学习——JavaScript原生实现购物车案例
JavaScript中关于预编译、作用域链和闭包的理解
JavaScript 去重和重复次数统计
Mar 31 #Javascript
vue中三级导航的菜单权限控制
Mar 31 #Vue.js
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
vue3中的组件间通信
You might like
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php 数组的一个悲剧?
2011/05/11 PHP
解析php中memcache的应用
2013/06/18 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
python轻松查到删除自己的微信好友
2016/01/10 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python与C互相调用的方法详解
2017/07/14 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
python破解同事的压缩包密码
2020/10/14 Python
python 获取计算机的网卡信息
2021/02/18 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
JPA的优势都有哪些
2013/07/04 面试题
护理学中专毕业生求职信
2013/11/11 职场文书
客户答谢会活动方案
2014/08/31 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
父亲节活动总结
2015/02/12 职场文书
幼儿园语言教学反思
2016/02/23 职场文书