ES6 解构赋值的原理及运用


Posted in Javascript onMay 25, 2021

数组的解构赋值

let [a, b, c] = [1, 2, 3]

同时定义多个变量,a匹配1、b匹配2、c匹配3

ES6 解构赋值的原理及运用

解构赋值允许指定默认值,即左边变量指定默认值,右边没有对应的值,会优先输出默认值。

let [x, y = 'b'] = ['a'] // x = 'a', y = 'b'

x匹配字符a,y默认值为字符b,若右边没有对应的,默认输出字符b。

对象的解构赋值

解构不仅可以用于数组,还可以用于对象,对象的解构与数组有一个重要的不同,数组的元素是按照次序排列的,变量的取值由它的位置决定的;而对象的属性没有次序,变量必须与属性同名才能取到正确的值。

let {
    name,
    age,
    hobbies: [one, two]
} = {
    name: 'shiramashiro',
    age: 21,
    hobbies: ['骑行', '动漫']
}

比如我取age的值,改成取abc的值,由于没有和对象中的属性名对应,无法对应赋值,所以是undefined。

解构赋值的运用

交换变量的值

正常想到交换变量的值的方式

let x = 1,
    y = 2,
    temp = 0

temp = x // x = 1 = temp
x = y // y = 2 = x
y = temp // temp = 1 = y

console.log('x => ', x)
console.log('y => ', y)

利用解构赋值交换变量

let x = 1;
let y = 2;
[x, y] = [y, x];

console.log('x => ', x)
console.log('y => ', y)

这样交换变量x和y的值,写法不仅简洁,而且易读,语义非常清晰。

从函数返回多个值

函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回,有了解构赋值,就变得更加方便了。

提取hobbies数组中的第二个值

function getArray() {
    return {
        name: 'kongsam',
        age: 21,
        hobbies: ['骑行', '动漫', '羽毛球']
    }
}
console.log(getArray().name + '喜欢' + getArray().hobbies[1]) // 动漫

利用解构赋值获取hobbies数组中的第二个值

let {name, age, hobbies} = getArray()
console.log(name + '喜欢' + hobbies[1]) // 动漫

遍历Map结构

对于for...of循环遍历来说,遍历出来的值是一个数组,而解构赋值对于数组是可以“模式匹配”的,这很快速地取出键-值。

ES6 解构赋值的原理及运用

for...of循环遍历配合解构赋值获取键-值就非常方便。

for (let [key, value] of map) {
    console.log("key => ", key)
    console.log("value => ", value)
}

ES6 解构赋值的原理及运用

函数参数的解构赋值

// let { x = 10, y = 5 } = {}

function f({ x = 10, y = 5 } = {}) {
    return [x, y]
}

console.log(f({ x: 100, y: 50 })) // [100, 50]
console.log(f({ x: 3 })) // [3, 5]
console.log(f({})) // [10, 5]
console.log(f()) // [10, 5]

可以给函数的参数中传入对象,并且可以对传入的对象设置默认值。它将被解构到函数内部里进行使用,你也可以这样理解。

function f(x = 10, y = 5) {
    return [x, y]
}

console.log(f(100, 50)) // [100, 50]
console.log(f(3)) // [3, 5]
console.log(f()) // [10, 5]

上面的写法不一样,也会导致结果不一样

function f({ x, y } = { x: 10, y: 5 }) {
    return [x, y]
}

console.log(f({ x: 100, y: 50 })) // [100, 50]
console.log(f({ x: 3 })) // [3, undefined]
console.log(f({})) // [undefined, undefined]
console.log(f()) // [10, 5]

第三和第四个打印会有undefined,这是因为传入的x或y不对应对象属性中的值,匹配不成功所导致的。

以上就是ES6 解构赋值的原理及运用的详细内容,更多关于ES6 解构赋值的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript入门教程(5) js Screen屏幕对象
Jan 31 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
浅谈Javascript变量作用域问题
Dec 16 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
Apr 06 Javascript
Svg.js实例教程及使用手册详解(一)
May 16 Javascript
JavaScript从0开始构思表情插件
Jul 26 Javascript
JS实现的表头列头固定页面功能示例
Jan 10 Javascript
webpack4 + react 搭建多页面应用示例
Aug 03 Javascript
详解js中let与var声明变量的区别
Apr 05 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
js Proxy的原理详解
May 25 #Javascript
解析原生JS getComputedStyle
80行代码写一个Webpack插件并发布到npm
Ajax请求超时与网络异常处理图文详解
May 23 #Javascript
vue-element-admin项目导入和导出的实现
May 21 #Vue.js
vue2实现provide inject传递响应式
May 21 #Vue.js
You might like
php递归列出所有文件和目录的代码
2008/09/10 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
纯JS实现简单的日历
2017/06/26 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python求质数的3种方法
2018/09/28 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python 串口读写的实现方法
2019/06/12 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
《兰亭集序》教学反思
2014/02/11 职场文书
合作协议书
2014/04/23 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
Python torch.flatten()函数案例详解
2021/08/30 Python
Java8中Stream的一些神操作
2021/11/02 Java/Android