Spread操作符(...),也称作展开操作符,作用是将可迭代的(Iterable)对象进行展开。

比如有2个数组,我们要将其中一个数组中所有元素插入到另一个数组中,通过Spread操作符,就可以这样进行:

var fruits = ["apple", "orange", "peach"];
var shoppingList = ["t-shirt", ...fruits, "egg"]; // shoppingList的值:["t-shirt", "apple", "organe", "peach", "egg"]

我们看到,通过在shoppingList中使用Spread操作符对fruits数组进行展开,就可以轻松的将fruits数组元素变成shoppingList中的数组元素,非常简单。如果不用Spread操作符,我们也可以通过循环数组并建新数组的方式来实现,但是明显会复杂的多。

另一个常见的场景是在函数调用传参的时候:

function testFunc(x, y, z) {console.log(x, y, z);
}var args = [10, 15, 20];testFunc(args);  //不正确
testFunc(...args); //正确

我们的testFunc()是一个接受3个参数的函数,而变量args是一个包含了3个元素的数组。如果直接把args作为参数传入testFunc(),肯定是不符合这个函数的设计逻辑的。在这种情况下,使用Spread操作符,就可以把数组中的元素展开并填充这个函数的参数列表,达到理想中的效果。

最后,我们在一开始提到,Spread操作符可以展开Iterable的对象,这样的话,除了数组之外,所有实现了Symbol.iterator的对象,如:Set, Map和Generator等等,都可以使用Spread操作符。

var map = new Map();
map.set("a", 1);
map.set("b", 2);
var arr1 = [...map];  //[["a", 1], ["b", 2]]var set = new Set();
set.add(1);
set.add(2);
set.add(1);
set.add(3);
var arr2 = [...set];  //[1, 2, 3]function *myGen() {yield "hello";yield "world";
}
var arr2 = [...myGen()]; //["hello", "world"]

ES6特性之:Spread操作符相关推荐

  1. JavaScript ES6 特性

    JavaScript ES6 特性 下面的代码主要是描述以下内容: let是块区作用域,不会变量提升.var也是块做作用域,但是会变量提升. -展开操作符作用于数组. 数组解构赋值. 对象增强. -展 ...

  2. 9个超级实用的 ES6 特性,超级实用哦!

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

  3. 一些当前 Node.js 中最流行 ES6 特性的 benchmark (V8 / Chakra)

    前言 项目 github 地址:https://github.com/DavidCai1993/ES6-benchmark 如果有想要增加的特性 benchmark ,欢迎更新benchmarks/ ...

  4. 最常用的ES6特性(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  5. 第四节:教你如何快速让浏览器兼容ES6特性

    写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...

  6. javascript es6 特性简介

    目录 1.变量声明 const 和 let 2.字符串 3.函数 4.拓展的对象功能 5.更方便的数据访问--解构 6.Spread Operator 展开运算符 7.import 和 export ...

  7. es6 数组合并_九个前端开发必学超级实用的 ES6 特性

    1.展开操作符 顾名思义,用于对象或数组之前的展开操作符(-),将一个结构展开为列表. 这种写法够优雅,够简洁吧?如果不用展开操作符 我们得这么写: 展开操作符也适用于合并对象的属性: 不用展开操作符 ...

  8. 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录

    使用场景:发现项目有些旧代码多层调用某个对象的属性,由于目标对象可能没那个属性,就导致报错,之前研究es6新特性时发现可以用?.来判断某个对象是否有某个属性来赋值. 测试源代码: var a = {n ...

  9. Nodejs 4.0 ES6特性

    简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js 的包管理器 ...

最新文章

  1. 虚拟机ubuntu搭建ftp服务器配置,虚拟机VMware15 Ubuntu18.04 搭建FTP服务器
  2. 前端学习(2306):react之组件使用
  3. python3 urllib3文档_python urllib3
  4. Context是怎么在Go语言中发挥关键作用的
  5. sudo chown -R $(whoami) /usr/local/lib/pkgconfig
  6. DBnet检测知识蒸馏+tensorrt推理(文字检测+条形码检测)
  7. python requests session post_requests.session()发送请求 和使用requests直接发送请求的区别...
  8. java json 合并_java中,怎么把两个jsonObject合并成一个?
  9. Docker Alpine安装oracle客户端
  10. Tbase 源码 (五)
  11. PR2018安装及错误处理
  12. HTML初心自学记录(四)列表超链接
  13. 数梦工场:我们帮你实现你驾驭数据的梦想
  14. 港中文深圳校区计算机研究生怎么样,香港中文大学(深圳)大概相当于国内什么水平高校...
  15. 关于0x3f3f3f3f(0x四个3f)
  16. html—显示照片(方法一)
  17. 不能有比这个再靠谱的星座分析了
  18. AndroidManifest.xml乱码
  19. html制作日期计划表,学习计划每日时间安排表参考
  20. java 使用adobe fms流媒体

热门文章

  1. 投后管理岗面试_2020天津水务招79人,管理岗+操作岗,专科起报
  2. 滴答定时器的计数模式_【高手私藏】STM32学习笔记:SysTick滴答时钟
  3. php在線評論,php在線生成pdf筆記 | 學步園
  4. mysql8审计_审计对存储在MySQL 8.0中的分类数据的更改
  5. 请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写),统计出结果后,请按照{'a':3,'b':2}的格式输出。
  6. 天津计算机的专科学校,天津市电子计算机职业中等专业学校
  7. 将视图转为image_JavaScript二进制数组(2)TypedArray视图
  8. 查找空目录Linux,Linux中find批量删除空文件及空文件夹脚本
  9. eclipse debug 工程源码时出现source not found问题解决
  10. 2014 网选 5011 Game(Nim游戏,数学题)