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 相关文章推荐
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
Mar 31 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
May 13 Javascript
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
Jan 06 Javascript
document.createElement()用法
Mar 13 Javascript
利用jquery操作Radio方法小结
Oct 20 Javascript
javascript实现图像循环明暗变化的方法
Feb 25 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
Nov 26 Javascript
js原生map实现的方法总结
Jan 19 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
Ajax实现局部刷新的方法实例
前端学习——JavaScript原生实现购物车案例
JavaScript中关于预编译、作用域链和闭包的理解
JavaScript 去重和重复次数统计
Mar 31 #Javascript
vue中三级导航的菜单权限控制
Mar 31 #Vue.js
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
vue3中的组件间通信
You might like
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
vue实现通讯录功能
2018/07/14 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
Python中的高级数据结构详解
2015/03/27 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
使用python绘制常用的图表
2016/08/27 Python
详解python之简单主机批量管理工具
2017/01/27 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
学生安全责任书范本
2014/07/24 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
2014年质检员工作总结
2014/11/18 职场文书
早恋主题班会
2015/08/14 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
JavaScript流程控制(循环)
2021/12/06 Javascript