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 相关文章推荐
wordpress之js库集合研究介绍
Aug 17 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
Oct 17 Javascript
js调用后台、后台调用前台等方法总结
Apr 17 Javascript
使用正则表达式的格式化与高亮显示json字符串
Dec 03 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
小程序input数据双向绑定实现方法
Oct 17 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
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javascript 写类方式之四
2009/07/05 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
妇联主席先进事迹
2014/05/18 职场文书
学校食品安全实施方案
2014/06/14 职场文书
计划生育诚信协议书
2014/11/02 职场文书
个人先进事迹总结
2015/02/26 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
个人求职意向书
2015/05/11 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
MySQL GTID复制的具体使用
2022/05/20 MySQL