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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
简单通用的JS滑动门代码
Dec 19 Javascript
自写的一个jQuery圆角插件
Oct 26 Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
jQuery版本升级踩坑大全
Jan 12 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
bootstrap基础知识学习笔记
Nov 02 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
Aug 09 Javascript
更改BootStrap popover的默认样式及popover简单用法
Sep 13 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP系统流量分析的程序
2006/10/09 PHP
用文本作数据处理
2006/10/09 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
python定时器使用示例分享
2014/02/16 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
《乡愁》教学反思
2014/02/18 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
纪律教育月活动总结
2014/08/26 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python