展开运算符和剩余参数

239 阅读2分钟

一、展开运算符

展开运算符是(Spread Operator)是JavaScript ES6新特性中用来处理数组和对象的语法糖。允许一个表达式在某处展开,函数调用时,使用三个点(...)将数组或类数组对象展开成独立的参数列表。

1.基本用法

const arr = [1,2,3]
console.log(...arr) // 1,2,3

2.函数调用

传统方法用apply实现

  • 将数组展开成多个参数的形式,其中函数参数和数据元素是一一对应的
function test(a, b) {
  return a + b  // 3
}
const arr = [1, 2, 3]
test.apply(null, arr)

es6展开运算符实现的效果则简洁明了

function test(a, b) {
  return a + b  // 3
}
const arr = [1, 2, 3]
test(...arr)

从而可以看出两者的效果是完全一样的

3.合并数组和对象

  • 数组合并:将两个数组展开成多个独立的元素,并将他们合并到一个新的数组
  • 通常我们用push,unshift,splice来构建一个新的数组
  • 用展开运算符可以更简单高效的工作

传统用concat的方法

const arr1 = [1,2,3]
const arr2 = [4,5,6]
const newArr = arr1.concat(arr2)
console.log(newArr)  // [1,2,3,4,5,6]

es6的写法

const arr1 = [1,2,3]
const arr2 = [4,5,6]
const newArr = [...arr1, ...arr2]
console.log(newArr) // [1,2,3,4,5,6]
  • 对象合并
  • 用展开运算符将两个对象展开成多个独立的键值对,并将他们合并到一个新的对象
const obj = {
 a: 1,
 b: 2
}
const obj2 = {
 c: 3,
 d: 4
}
const newObj = {...obj, ...obj2}
console.log(newObj)  // {a: 1, b:2, c:3, d:4}

4.优点

  • 一:更简洁的代码

    • 使用展开运算符可以使代码更加简洁,减少不必要的重复。就像上述例子一样,数组的合并,使用展开运算符则是更简洁,代码更容易阅读
  • 二:更高的性能

    • 展开运算符比传统的方法在性能上更具优势。
  • 综上所述,展开运算符是一种非常便利的语法糖,它可以使JavaScript代码更加简洁、更加高效。它可以将数组和对象展开成多个独立的元素,方便函数调用或数组初始化

二、剩余参数

  • 允许我们将一个不定数量的参数表示为一个数组
数组求和
  • 剩余参数永远是一个数组,即使没有值也是个数组
  • 使用箭头函数的时候,即使只有剩余参数也不可以把括号去掉
  • 剩余参数只能在最后一个位置写,在其他地方会报错
const test = (...arr) => arr.reduce((pre, cur) => pre + cur, 0)

test(1)             // 1
test(1, 2)         // 3
test(1, 2, 3)     // 6

展开运算符和剩余参数的区别

  • 展开运算符一般用于解构数组和对象,而剩余参数一般用于将多个参数收集到一个数组中