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 相关文章推荐
一些常用的JS功能函数代码
Jun 23 Javascript
javascript分页代码实例分享(js分页)
Dec 13 Javascript
jquery实现的网页自动播放声音
Apr 30 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
js解决movebox移动问题
Mar 29 Javascript
Javascript的无new构建实例详解
May 15 Javascript
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 Javascript
javascript实现数字时钟效果
Feb 06 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 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懒人函数 自动添加数据
2011/06/28 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP实现递归无限级分类
2015/10/22 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
javascript一些不错的函数脚本代码
2008/09/10 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python open读写文件实现脚本
2008/09/06 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
ORACLE十问
2015/04/20 面试题
大三学习计划书范文
2014/05/02 职场文书
全运会口号
2014/06/20 职场文书
毕业实习单位意见
2015/06/04 职场文书
孔子观后感
2015/06/08 职场文书
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers