ES6扩展运算符的用途实例详解


Posted in Javascript onAugust 20, 2017

ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性。

扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象中的每个元素都一个个的迭代并取出来变成单独的被使用。

看这个例子:

console.log(...[3, 4, 5])

结果:

3 4 5

调用其实就是:

console.log(3, 4, 5)

合并数组

可以使用扩展运算符将多个数组进行合并。

let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let arr3 = [7, 8, 9]
console.log([...arr1, ...arr2, ...arr3])

结果:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

函数多参数传递, 替换Apply

先把参数定义成数组,函数定义好。

let arr4 = ['arg1', 'arg2', 'arg3', 'arg4']
let fun1 = (a1, a2, a3, a4) => {
 console.log( a1, a2, a3, a4)
}

在ES6前,要把数组参数传递给函数,要么按照下标访问数组元素去调用函数,缺点是数组个数和函数参数个数完全绑定,有一个个数发生变化,那么就要修改了。

fun1(arr4[0], arr4[1], arr4[2], arr4[3])

要么就用Apply进行调用,结果当然是没毛病,也是ES6之前用的最多的。

fun1.apply(null, arr4)

如果是用扩展运算符,那就方便咯。

fun1(...arr4)

结果:

arg1 arg2 arg3 arg4

调用简洁爽快。

与解构配合赋值

配合使用,可以从数组中提取除第一个以后的所有元素成另外一个数组。

let [var1, ...arr5] = [1, 2, 3, 4, 5, 6]
console.log(var1)
console.log(arr5)

结果:

1
[ 2, 3, 4, 5, 6 ]

但要注意,与解构配合时,扩展运算符只能用在最后一个上,否则报错。

可以展开实现了Iterator 接口的对象

比如Map,Set,数组就是从Iterator接口实现来的,Object不是,所以扩展Object会报错。

扩展Set。

let set1 = new Set()
set1.add(1)
set1.add(2)
set1.add(3)
console.log(...set1)

结果:

1 2 3

扩展Map。

let map1 = new Map();
map1.set('k1', 1);
map1.set('k2', 2);
map1.set('k3', 3);
console.log(...map1)

结果:

[ 'k1', 1 ] [ 'k2', 2 ] [ 'k3', 3 ]

注意,扩展出来的一个个的数组,按照map的键值对结构,每个数组都是2个元素,一个是key,一个是value。

如果扩展Object,就会报错。

let obj1 = {
  p1: 1,
  p2: 2,
  p3: 3
}
console.log(...obj1)

报错。

总结

以上所述是小编给大家介绍的ES6扩展运算符的用途,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
JavaScript类型转换方法及需要注意的问题小结(挺全面)
Nov 11 Javascript
理解Javascript闭包
Nov 01 Javascript
jQuery简单几行代码实现tab切换
Mar 10 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
jQuery判断是否存在滚动条的简单方法
Sep 17 Javascript
JS二叉树的简单实现方法示例
Apr 05 Javascript
js Date()日期函数浏览器兼容问题解决方法
Sep 12 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
Feb 08 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
JavaScript如何判断input数据类型
Feb 06 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 Javascript
JavaScript实现鼠标移入随机变换颜色
Nov 24 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 #Javascript
Vue动态组件实例解析
Aug 20 #Javascript
jQuery实现表格冻结顶栏效果
Aug 20 #jQuery
Vue组件实例间的直接访问实现代码
Aug 20 #Javascript
JavaScript贪吃蛇小组件实例代码
Aug 20 #Javascript
React Native 环境搭建的教程
Aug 19 #Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 #Javascript
You might like
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
jQuery.each使用详解
2015/07/07 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Django添加feeds功能的示例
2018/08/07 Python
使用Python 统计高频字数的方法
2019/01/31 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
python中的错误如何查看
2020/07/08 Python
Java和Javasciprt的区别
2012/09/02 面试题
一套比较完整的软件测试人员面试题
2012/05/13 面试题
护理自荐信范文
2013/10/05 职场文书
航空大学应届生求职信
2013/11/10 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
老师对学生的评语
2014/04/18 职场文书
认错检讨书
2014/10/02 职场文书
上班迟到检讨书
2015/05/06 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
Python打包为exe详细教程
2021/05/18 Python
MySQL优化及索引解析
2022/03/17 MySQL