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中常用的55个经典技巧
Aug 12 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
javascript匿名函数应用示例介绍
Mar 07 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
jQuery之简单的表单验证实例
Jul 07 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
vue2.x select2 指令封装详解
Oct 12 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
使用axios请求时,发送formData请求的示例
Oct 29 Javascript
使用vant的地域控件追加全部选项
Nov 03 Javascript
vue实现列表垂直无缝滚动
Apr 08 Vue.js
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默认安装产生系统漏洞
2006/10/09 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
python对象与json相互转换的方法
2019/05/07 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
如何基于Python创建目录文件夹
2019/12/31 Python
python将音频进行变速的操作方法
2020/04/08 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
校园环保标语
2014/06/13 职场文书
生活部的活动方案
2014/08/19 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
2015新学期开学寄语
2015/02/26 职场文书
公司地址变更通知
2015/04/25 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android