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 相关文章推荐
Prototype1.5 rc2版指南最后一篇之Position
Jan 10 Javascript
JQuery为textarea添加maxlength属性的代码
Apr 07 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
jquery使用each方法遍历json格式数据实例
May 18 Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
Aug 13 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
Apr 19 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 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
5.PHP的其他功能
2006/10/09 PHP
用PHP调用数据库的存贮过程!
2006/10/09 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
初识Laravel
2014/10/30 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
python实现简单爬虫功能的示例
2016/10/24 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
应聘自荐信
2013/12/14 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
护士求职信
2014/07/05 职场文书
个人廉洁自律总结
2015/03/06 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers