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系列之Javascript基础篇
Jun 07 Javascript
JavaScript NaN和Infinity特殊值 [译]
Sep 20 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
JS字符串false转boolean的方法(推荐)
Mar 08 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
基于vue监听滚动事件实现锚点链接平滑滚动的方法
Jan 17 Javascript
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
JavaScript实现九宫格拖拽效果
Jun 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
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
PHP7 list() 函数修改
2021/03/09 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
python实现简单的计时器功能函数
2015/03/14 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
python collections模块的使用
2020/10/16 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
秋季红领巾广播稿
2014/01/27 职场文书
国培远程培训感言
2014/03/08 职场文书
专职安全员岗位职责
2015/04/11 职场文书
夏洛特的网观后感
2015/06/15 职场文书