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 相关文章推荐
取得父标签
Nov 14 Javascript
让textarea自动调整大小的js代码
Apr 12 Javascript
JavaScript 判断浏览器是否支持SVG的代码
Mar 21 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
setTimeout自动触发一个js的方法
Jan 15 Javascript
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
jquery+ajax+text文本框实现智能提示完整实例
Jul 09 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
Angular中使用MathJax遇到的一些问题
Dec 15 Javascript
在Vue中使用echarts的方法
Feb 05 Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
php里array_work用法实例分析
2015/07/13 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript的Cookies
2008/01/16 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
vue多次循环操作示例
2019/02/08 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
Python 文件和输入输出小结
2013/10/09 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
python3 读取Excel表格中的数据
2018/10/16 Python
Python和Sublime整合过程图示
2019/12/25 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
一个入门级python爬虫教程详解
2021/01/27 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
《自然之道》教学反思
2014/02/11 职场文书
小学清明节活动方案
2014/03/08 职场文书
母亲节演讲稿
2014/05/27 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书