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 eval函数深入认识
Feb 21 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
JavaScript实现表格点击排序的方法
May 11 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
JavaScript解析JSON格式数据的方法示例
Jan 24 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
react项目实践之webpack-dev-serve
Sep 14 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
react PropTypes校验传递的值操作示例
Apr 28 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
Python中用Spark模块的使用教程
2015/04/13 Python
Python写入CSV文件的方法
2015/07/08 Python
Python文件处理
2016/02/29 Python
python实现文本界面网络聊天室
2018/12/12 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
本科生求职简历的自我评价
2013/10/21 职场文书
工程造价与管理专业应届生求职信
2013/11/23 职场文书
心得体会开头
2014/01/01 职场文书
初中语文教学反思
2014/02/02 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
公司档案管理制度
2015/08/05 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP