展开操作符(spread)

展开运算符(spread operator)允许一个表达式在某处展开。展开运算符在多个参数(用于函数调用)或多个元素(用于数组字面量)或者多个变量(用于解构赋值)的地方可以使用。

函数调用中使用展开运算符

在以前我们会使用apply方法来将一个数组展开成多个参数:

function test(a, b, c) {
console.log(a, b, c) // 输出 0 1 2
}
var args = [0, 1, 2]
test.apply(null, args)

上面代码块中,我们把args数组当作实参传递给了a,b,c,这边正是利用了Function.prototype.apply的特性。

不过ES6有了展开运算符,我们就可以更加简洁地来传递数组参数:

function test(a, b, c) {
console.log(a, b, c) // 输出 0 1 2
}
var args = [0, 1, 2] test(...args)

我们使用...xxx展开运算符就可以把args展开直接传递给test()函数

数组字面量中使用展开运算符

  • 在ES6中,我们可以直接将一个数组合并到另一个数组中
let arr1 = ['a', 'b', 'c']
let arr2 = [...arr1, 'd', 'e'] console.log(arr2) // 输出:["a", "b", "c", "d", "e"]
  • 展开运算符也可以用在push函数中,以后不需再用apply()函数来合并两个数组
let arr1=['a', 'b', 'c']
let arr2=['d', 'e']
arr2.push(...arr1)
console.log(arr2) // 输出:["d", "e", "a", "b", "c"]

用于解构赋值(rest)

  • 解构赋值也是ES6中的一个特性,而展开运算符可以用于部分情景
let [arg1, arg2, ...arg3] = [1, 2, 3, 4]
console.log(arg1) //
console.log(arg2) //
console.log(arg3) // [3, 4]
注意点:
  • 展开运算符在解构赋值中的作用跟上面的展开作用看上去是相反的,它是将多个元素合成了一个新数组。
  • 解构赋值中展开运算符只能用在最后面,不能用在其他的位置
  • 下面的用法就会报语法错误
let [arg1, ...arg2, arg3] = [1, 2, 3, 4]
console.log(arg1)
console.log(arg2)
console.log(arg3)

类数组对象变成数组

  • 展开运算符可以将一个类数组对象变成一个真正的数组对象
let list = document.getElementsByTagName('div')
let arr = [...list]
console.log(arr)
  • list是类数组对象,通过使用展开运算符将其变成了数组对象

对象展开运算符(ES7)

  • ES7中的对象展开运算符可以更快捷地操作对象
let {x, y, ...z} = {x: 1, y: 2, a: 3, b: 4}
console.log(x) //
console.log(y) //
console.log(z) // {a: 3, b: 4}
  • 如上面的代码块,我们可以将一个对象中的一部分抽取出来,成为一个新对象赋值给展开运算符
  • 我们也可以像数组中插入数组那样将一个对象插入到另外一个对象中
let z = {a: 3, b: 4}
let n = {x: 1, y: 2, ...z}
console.log(n) // {x: 1, y: 2, a: 3, b: 4}
  • 合并两个对象
let a = {x: 1, y: 2}
let b = {z: 3}
let c = {...a, ...b}
console.log(c) // {x: 1, y: 2, z: 3}

剩余操作符(rest)

  • rest操作符用在函数的参数内,将剩余的参数放到foods数组中
function breakfast(dessert, drink, ...foods) {
console.log(dessert) //

ES5与ES6常用语法教程之 ④展开运算符...在数组和对象中的作用的更多相关文章

  1. ES5与ES6常用语法教程之 ②解构语法糖、声明变量异同

    js常用语法系列教程如下 es5与es6常用语法教程(1) es5与es6常用语法教程(2) es5与es6常用语法教程(3) es5与es6常用语法教程(4) es5与es6常用语法教程(5) es ...

  2. ES5与ES6常用语法教程之 ③模板字符串、判断字符串是否包含其它字符串

    这部分教程我们主要讲解以下几个常用语法 模板字符串 带标签的模板字符串 判断字符串中是否包含其他字符串 给函数设置默认值 模板字符串 老式的拼接字符串方法 let dessert = '

  3. ES5与ES6常用语法教程之 ①函数写法、创建对象、导入导出模块方式

    函数写法区别 计算a, b两个数字之和,有返回值 es5 写法 function add(a, b) { return a + b; } es6 写法(箭头函数) let add = (a, b) = ...

  4. ES6常用语法简介import export

    ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...

  5. ES6常用语法

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  6. ES6常用语法(上)

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

  7. ES6常用语法总结

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015.也就是说,ES6就是ES2015.虽 ...

  8. ES6常用语法(二)

    arrow functions (箭头函数) 函数的快捷写法.不需要 function 关键字来创建函数,省略 return 关键字,继承当前上下文的 this 关键字 // ES5 var arr1 ...

  9. vue学习(一)ES6常用语法

    1 ES6常用语法 1.1 变量提升 例① # 变量提升 <div id="app"> </div> <script> console.log( ...

随机推荐

  1. 制作自定义系统iso镜像

    一.制作自己的ISO启动盘篇 在需要安装特定系统的时候,我们使用原版的linux系统盘镜像来安装,需要手动操作N多步,在机器非常多的环境下,这种方式显然不理想,这是我我们就需要制作我们特定的系统盘来简 ...

  2. pycharm图像不能显示,之前是可以显示的。显示一两次突然不显示了

    网上说是什么包问题的就说了.我遇到一个非常奇葩的问题 因为你的设置可能是这样 每次都在窗口右侧的工具栏那边显示.可能突然心情不佳就不显示了.然后你再把勾去掉即可.你要喜欢再点上也行.

  3. web 9个令人震惊的WebGL示例

    20个使用WebGL和Three.js实现的网页场景 https://www.open-open.com/news/view/9d8136 20个使用WebGL和Three.js实现的网页场景 htt ...

  4. mysql随机取出n条数据

    SELECT * FROM  tableName  ORDER BY  RAND() LIMIT n      数据量小的话还可以, 数据量大起来了, 就影响性能了. $rubbish = (new ...

  5. jquery trigger() 方法 语法

    jquery trigger() 方法 语法 作用:trigger() 方法触发被选元素的指定事件类型.深圳大理石平台 触发事件:规定被选元素要触发的事件. 语法:$(selector).trigge ...

  6. android adb 命令发送 keyevent

    使用Adb shell command直接送key event給Android adb shell input keyevent 7 # for key '0' adb shell input key ...

  7. python创建文件夹方法

    def mkdir(path): # 引入模块 import os # 去除首位空格 path = path.strip() # 去除尾部 \ 符号 path = path.rstrip(" ...

  8. 2019牛客暑期多校训练营(第八场)A 单调栈

    题意 给一个\(n*m\)的01矩阵,找有多少个全1子矩阵不被其他全1子矩阵包括. 分析 用单调栈找到的全1子矩阵是不能向上扩展和向右扩展的,只需判断该子矩阵能否向左和向下扩展,若四个方向都不能扩展, ...

  9. AtCoder AGC004F Namori (图论)

    题目链接 https://atcoder.jp/contests/agc004/tasks/agc004_f 题解 神仙题.. 首先考虑树的情况,树是二分图,因此假设我们对二分图进行黑白染色,那么操作 ...

  10. $\LaTeX$数学公式大全12

    $12\ Font\ sizes$ ${\displaystyle \int f^{-1}(x-x_a)\,dx}$ {\displaystyle \int f^{-1}(x-x_a)\,dx} ${ ...