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)

报错。

End

 
 
 
 
 
 
 
 

ES6,扩展运算符的用途的更多相关文章

  1. ES6...扩展运算符(数组或类数组对象)

    数组和类数组对象定义 数组:[] 类数组对象:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为他是类数组对象. 数组使用 let foo_arr = [ ...

  2. ES6扩展运算符的几个小技巧

    es6扩展运算符,也就是...  ,作用是将一个数组转为用逗号分隔的参数序列. 那么问题来了,我们为啥要用这么奇怪的东东涅,当然因为它能大大提高我们的开发效率.所以,可别小看这三个点. 1.复制数组( ...

  3. ES6 扩展运算符 三点(...)

    含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[, , ]) // 1 2 3 conso ...

  4. ES6 扩展运算符 三个点(...)

    它是什么 es6中引入扩展运算符(...),它用于把一个数组转化为用逗号分隔的参数序列,它常用在不定参数个数时的函数调用,数组合并等情形.因为typeScript是es6的超集,所以typeScrip ...

  5. ES6 扩展运算符

    ES6的扩展运算符则可以看作是rest参数的逆运算.可以将数组转化为参数列表. 如:console.log(1,...[2,3,4],5) //1 2 3 4 5 用于合并数组: [1,2, ...m ...

  6. ES6扩展运算符...进行的数组删除

    今天写了按照React小书写了Reducer,发现基础真是太重要了,所有关于上层建筑的细节都需要回到下层细节中去寻找,而且现在的基础也由ES3变成了ES6了. const ADD_USER = &qu ...

  7. es6 扩展运算符 三个点...

    es6中引入扩展运算符…,它用于把一个数组转化为用逗号分隔的参数序列,它常用在不定参数个数时的函数调用,数组合并等情形.因为typeScript是es6的超集,所以typeScript也支持扩展运算符 ...

  8. Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)

    0.看文档呀 关于拓展运算符更详细的解释见 > MDN展开语法 关于剩余参数更详细的解释见 >MDN剩余参数 关于解构赋值更详细的解释见 >MDN解构赋值 直接看上面的文档更好 1. ...

  9. es6扩展运算符及rest运算符总结

    扩展运算符(...) 1.如果一个函数的参数个数不确定,可以用其代替 eg:求若干个数的和 2.改数组的引用为复制一份内存 此刻数组a也发生了变化,因为数组b是a的一个引用 此刻相当于复制了一份a 3 ...

随机推荐

  1. 解决eclipse部署项目各种乱码问题,推荐一下别人的做法

    http://blog.sina.com.cn/s/blog_62aab2760100l1hx.html

  2. 匿名函数 lambda

    lambda 参数 :  程序体 1. filter 与匿名函数结合运用 2. map与匿名函数结合运用

  3. memcahe

    网站的瓶颈 主要集中在数据库 ,用缓存(直接操作内存) 存储计算机的内存,如果一旦服务器断电,数据都将清空 内存:memcached redis基于文档:mongodb memcache:基于内存的高 ...

  4. coalesce :返回参数(列名)中第一个非NULL值的字段值

    示例 下面的语句返回值 34.(只返回一个值就算后面不为NULL也直接丢弃) SELECT COALESCE( NULL, 34, 13, 0 ) 备注 如果所有参数均为 NULL,则 COALESC ...

  5. IPV4闪退

    如果出现这种状况,在安全模式下重注册dll 运行->输入cmd->输入 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 ...

  6. Angular 个人深究(五)【外部包引用 Leaflet 简单实用】

    Leaflet 使用 最近在Angular项目中,用到了地图,由于种种原因放弃了百度地图api使用,最后选择了leaflet,简单介绍一下. 介绍: Leaflet 是一个为移动设备设计的交互式地图的 ...

  7. Spring Boot 入门详细分析

    推荐阅读: 我们为什么要学习 Spring Boot 我们搭建 Spring Boot 项目,可以使用 Spring 为我们提供的初始化网站,那个可能不太方便,今天呢,我们就来说说如何使用 IDEA ...

  8. 洛谷.3121.审查(AC自动机 链表)

    题目链接 //删掉一个单词需要前移一段位置,用链表维护就好了 复杂度O(sum(len)) #include <cstdio> #include <cstring> #defi ...

  9. BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)

    题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...

  10. 潭州课堂25班:Ph201805201 第三课:序列类型的方法 (课堂笔记)

    列表的方法: li = [] 添加: li.append( 'a' ) 追加元素进入列表 li.insert( 1, 'b' ) 插入元素到指定索引位置 ----->>>  li.i ...