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对checkbox操作 (循环获取)
May 20 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 Javascript
angularjs 处理多个异步请求方法汇总
Jan 06 Javascript
KnockoutJS 3.X API 第四章之click绑定
Oct 10 Javascript
AngularJs入门教程之环境搭建+创建应用示例
Nov 01 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
jQuery点击导航栏选中更换样式的实现代码
Jan 23 Javascript
折叠菜单及选择器的运用
Feb 03 Javascript
Vue $mount实战之实现消息弹窗组件
Apr 22 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
原生javascript如何实现共享onload事件
Jul 03 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下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
关于python多重赋值的小问题
2019/04/17 Python
PHP统计代码行数的小代码
2019/09/19 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
Python bisect模块原理及常见实例
2020/06/17 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
自我评价如何写好?
2014/01/05 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
班长竞选演讲稿
2014/04/24 职场文书
产品开发计划书
2014/04/27 职场文书
2014年医生工作总结
2014/11/21 职场文书
音乐教师求职信范文
2015/03/20 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis
工厂无线对讲系统解决方案
2022/02/18 无线电
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL