es6基础学习之解构赋值


Posted in Javascript onDecember 10, 2018

前言

es6的语法已经出了很长的时间了,在使用上也可以通过babel这类的编译工具转译为浏览器可以识别的es5的语法,但是依旧有很多开发在写代码的时候,依旧没有用es6的语法,而是习惯使用老的语法,这篇文章主要会介绍解构赋值基本用法以及在实际使用场景中相比es5语法的优势,让大家从根本上了解es6语法的优势

下面话不多说了,来一起看看详细的介绍吧

基本用法

数组解构

让我们一起先来看数组解构的基本用法:

let [a, b, c] = [1, 2, 3] // a=1, b=2, c=3
let [d, [e], f] = [1, [2], 3] // 嵌套数组解构 d=1, e=2, f=3
let [g, ...h] = [1, 2, 3] // 数组拆分 g=1, h=[2, 3]
let [i,,j] = [1, 2, 3] // 不连续解构 i=1, j=3
let [k,l] = [1, 2, 3] // 不完全解构 k=1, l=2

上面的例子包含了数组解构时常用的基本用法

对象解构

接下来再让我们一起看看对象解构的基本用法:

let {a, b} = {a: 'aaaa', b: 'bbbb'} // a='aaaa' b='bbbb'
let obj = {d: 'aaaa', e: {f: 'bbbb'}}
let {d, e:{f}} = obj // 嵌套解构 d='aaaa' f='bbbb'
let g;
(g = {g: 'aaaa'}) // 以声明变量解构 g='aaaa'
let [h, i, j, k] = 'nice' // 字符串解构 h='n' i='i' j='c' k='e'

使用场景

变量赋值

我们先来看最基本的使用场景:变量赋值,先来看我们在平时开发中是怎么使用es5对变量赋值的:

var data = {userName: 'aaaa', password: 123456}
var userName = data.userName
var password = data.password
console.log(userName)
console.log(password)
var data1 = ['aaaa', 123456]
var userName1 = data1[0]
var password1 = data1[1]
console.log(userName1)
console.log(password1)

上面两个例子是最简单的例子,用传统es5变量赋值,然后调用,这么写的问题就是显得代码??拢?髅饕恍锌梢愿愣ǖ氖虑榉且?萌?写?耄?纯纯唇夤垢持凳窃趺锤傻模?/p>

const {userName, password} = {userName: 'aaaa', password: 123456}
console.log(userName)
console.log(password)
const [userName1, password1] = ['aaaa', 123456]
console.log(userName1)
console.log(password1)

相对于es5的语法是不是更加简单明了,在数据量越大用解构赋值的优势越明显

函数参数的定义

一般我们在定义函数的时候,如果函数有多个参数时,在es5语法中函数调用时参数必须一一对应,否则就会出现赋值错误的情况,来看一个例子:

function personInfo(name, age, address, gender) {
 console.log(name, age, address, gender)
}
personInfo('william', 18, 'changsha', 'man')

上面这个例子在对用户信息的时候需要传递四个参数,且需要一一对应,这样就会极易出现参数顺序传错的情况,从而导致bug,接下来来看es6解构赋值是怎么解决这个问题的:

function personInfo({name, age, address, gender}) {
 console.log(name, age, address, gender)
}
personInfo({gender: 'man', address: 'changsha', name: 'william', age: 18})

这么写我们只需要知道要传什么参数就行来,不需要知道参数的顺序也没问题

交换变量的值

在es5中我们需要交换两个变量的值需要借助临时变量的帮助,来看一个例子:

var a=1, b=2, c
c = a
a = b
b = c
console.log(a, b)

来看es6怎么实现:

let a=1, b=2;
[b, a] = [a, b]
console.log(a, b)

是不是比es5的写法更加方便呢

函数的默认参数

在日常开发中,经常会有这种情况:函数的参数需要默认值,如果没有默认值在使用的时候就会报错,来看es5中是怎么做的:

function saveInfo(name, age, address, gender) {
 name = name || 'william'
 age = age || 18
 address = address || 'changsha'
 gender = gender || 'man'
 console.log(name, age, address, gender)
}
saveInfo()

在函数离 main先对参数做一个默认值赋值,然后再使用避免使用的过程中报错,再来看es6中的使用的方法:

function saveInfo({name= 'william', age= 18, address= 'changsha', gender= 'man'} = {}) {
 console.log(name, age, address, gender)
}
saveInfo()

在函数定义的时候就定义了默认参数,这样就免了后面给参数赋值默认值的过程,是不是看起来简单多了

总结

这篇文章简单介绍了es6的解构赋值,如果有错误或不严谨的地方,欢迎批评指正,如果喜欢,欢迎点赞收藏

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
基于Axios 常用的请求方法别名(详解)
Mar 13 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
vue-cli3环境变量与分环境打包的方法示例
Feb 18 Javascript
详解vue中$nextTick和$forceUpdate的用法
Dec 11 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
vue中将html字符串转换成html后遇到的问题小结
Dec 10 #Javascript
vue的.vue文件是怎么run起来的(vue-loader)
Dec 10 #Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 09 #Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 #Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 #Javascript
vue form check 表单验证的实现代码
Dec 09 #Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 #Javascript
You might like
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
IE8 原生JSON支持
2009/04/13 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
js选项卡的制作方法
2017/01/23 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
使用python实现对元素的长截图功能
2019/11/14 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
会计自我鉴定
2013/11/02 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
幼儿园教师求职信
2015/03/20 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
工作建议书范文
2019/07/08 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
JS 基本概念详细介绍
2021/10/16 Javascript
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python