ES6 ... 展开&收集运算符
...展开&收集运算符,也就是说他可以干两件事情,展开和收集
一:收集,顾名思义把散列东西收集到一个地方,这个地方ES6规定收集在数组中
例如:下面函数fn将传递的参数收集在arg变量中,打印arg是一个数组,里面包含着传来的参数。就像吃豆子一样把值收到自己的嘴里。
function fn(...arg){
console.log(arg); //[1,2,3]
}
fn(1,2,3)
上面的代码让我们想起来arguments,也是保存着传过来的参数。但是我们知道arguments对象是类数组,当我们想使用数组的方法时,时使用不了的,需要手动的转化才可以,而此时的...收集后就是一个数组。可以使用一系列的数组方法。
...运算符让我们感觉有点省略的意思,把参数用...代替。当像下面那样传参时参数(3,4,5,6,7),实参(a,b,...arg).此时的arg就是5,6,7.也就是说...收集只收集你没定义的形参,就像你省略不写他们。因此...只能作为最后一位出现。
function test(a,b,...arg){
console.log(a,b,arg); 3,4,[5,6,7]
}
test(3,4,5,6,7);
二: 展开,展开,首先展开的这个东西应该是一个集合,如果是一个值的话,那还展开干嘛。所以ES6规定,展开的这个值必须是可迭代对象(带Symbol(Symbol.iterator)属性的对象),怎么看这个是不是可迭代对象,可以在他的原型上看有没有Symbol(Symbol.iterator)属性。事实上,所有集合对象--数组,Set,Map,字符串的原型上都默认携带这个属性,因此都是可迭代对象。展开成什么?展开成散列的值。
例如:
var arr = [1,2,3];
console.log(...arr); //1 2 3
可以利用这个特性将两个数组合并成一个数组
var arr1 = [1,2,3];
var arr2 = [7,8,9];
var newArr = [...arr1,...arr2];
...运算符可以获取(展开)对象里的属性。但必须在对象里展开{...arg},因为对象不是可迭代对象所以直接...arg会报错。
var obj1 = {
name: 'zhang',
age: 18,
}
var obj2 = {
...obj1
}
console.log(obj2); {name:'zhang',age:18}
合并对象
var obj1 = {
name:'zhang',
age:18,
}
var obj2 = {
leader:{
'name':'wen',
'age': 20
},
text:'ccc'
}
var newObj = {
...obj1,
leader:{
...obj2.leader
}
}
console.log(newObj);
ES6 ... 展开&收集运算符的更多相关文章
- 【JS】388- 深入了解强大的 ES6 「 ... 」 运算符
本文原载于 SegmentFault 社区 专栏:大前端 作者:皮小蛋 背景 ... 运算符,是 ES6 里一个新引入的运算法,也叫 展开/收集 运算符,我们每天都要和它打交道. 这篇文章,我就带你 ...
- ES6展开运算符数组合并,函数传参
定义: .展开运算符允许一个表达式在某处展开. 使用场景 1.展开函数在多个参数的地方使用 .意指用于函数传参 2.多个元素的地方使用,意指用于数组字面量 3.多个边框的地方使用,意指用于解构赋值 函 ...
- ES6,扩展运算符的用途
ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性. 扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象 ...
- [转] ES6展开运算符
语法 用于函数调用 myFunction(...iterableObj); 用于数组字面量 [...iterableObj, 4, 5, 6] 函数传参 目前为止,我们都是使用Function.pro ...
- es6展开运算符
数组的展开合并 现在有两个数组[1, 2, 3, 4]和[5, 6, 7],想要将两个函数拼接成一个新的函数. //es5的写法 let arr1 = [1, 2, 3, 4]; let arr2 = ...
- ES6展开运算符的3个用法
展开运算符的用法1:传参 // 展开运算符的用法1 : 传参 function test(a,b) { return a + b ; } var arr = [1,2]; console.log(te ...
- es6 ...展开运算符
展开运算符,目前应用在数组上,对象展开运算符,将在es7 提案 1.两个对象连接返回新的对象 let a = {aa:'aa'} let b = {bb:'bb'} let c = {...a,. ...
- ES6展开运算符(...)
数组字面量中使用展开运算符 我们可以这样合并数组: var arr1=['a','b','c']; var arr2=[...arr1,'d','e']; //['a','b','c','d','e' ...
- ES6 展开运算符 三个点实际功能
1.数组中使用let defaultColors = ['red', 'greed'] let favoriteColors = ['orange', 'yellow'] let fallColors ...
随机推荐
- 鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法
鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网.物联网.车联网,从而催生了庞大的计算需求.但是功耗墙问题以功耗和冷却两大限制极大的影响了单核算力的发展.为了满足 ...
- .Net Core下使用MQTT协议直连IoT平台
[摘要] .Net平台通过原生MQTT接口,作为南向设备对接OceanConnect平台 因为种种历史原因吧,目前华为平台上对.net的支持案例SDK确实比较少,当看到各种语言的SDK和Demo,唯独 ...
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
目录 Event Loop 是什么? Event Loop 基本解释 事件循环阶段概览 事件循环细节 timers pending callbacks poll阶段 check close callb ...
- TypeError: 'list' object cannot be interpreted as an integer
TypeError: 'list' object cannot be interpreted as an integer 类型错误,不能将list对象转换为一个整数. 错误代码,例如如下例子: arg ...
- 详解TCP连接的“三次握手”与“四次挥手”(上)
一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...
- 17-Python执行JS代码--PyExecJS、PyV8、Js2Py
一.Python执行JS代码--PyExecJS.PyV8.Js2Py 1.1.PyExecJS PyExecJS的优点是您不需要照顾JavaScript环境.特别是,它可以在Windows环境中运行 ...
- zuul+security跨域Cors问题解决
zuul+security跨域Cors问题解决 简介 场景 在服务后台都会出现跨域cors问题,不过一般spring解决起来比较方便,在框架+框架的基础上,问题就显得特别明显了,各种冲突,不了解源码的 ...
- POJ 1966 Cable TV NETWORK(网络流-最小点割集)
Cable TV NETWORK The interconnection of the relays in a cable TV net ...
- 使用stm32开发 USB_CAN 适配器测试
USB_CAN 适配器测试例程 采用CDC透传模式 一.简介 CAN总线无处不在,在设计开发中,到处需要用到CAN总线调试工具,本工具可以作为CAN的基础测试工具,用于监听CAN总线,或测试CAN数据 ...
- [状态模式]实现stopwatch
1.模拟传统面向对象语言的状态模式实现 // Stopwatch类 状态机class Stopwatch { constructor() { this.button1 = null ...