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 相关文章推荐
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
Dec 08 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
jQuery双向列表选择器select版
Nov 01 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
Dec 29 Javascript
优雅的在React项目中使用Redux的方法
Nov 10 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 10 jQuery
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
Sep 12 Javascript
使用p5.js临摹动态图片
Nov 04 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显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
javascript prototype 原型链
2009/03/12 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
vue+element实现批量删除功能的示例
2018/02/28 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
Python用模块pytz来转换时区
2016/08/19 Python
Django中Model的使用方法教程
2018/03/07 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Python 创建TCP服务器的方法
2020/07/28 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
结构工程研究生求职信
2013/10/13 职场文书
倡议书的写法
2014/08/30 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
诚实守信主题班会
2015/08/13 职场文书
趣味运动会广播稿
2015/08/19 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
Python+DeOldify实现老照片上色功能
2022/06/21 Python