扩展运算符是...,将数组(实现了Iterator接口的对象)分割开,类似于rest参数的逆运算。
console.log(...['a', 'b', 'c']) // a b c
合并数组时
let arr1 = [1, 2, 3],
arr2 = [4, 5, 6]
arr3 = [...arr1, ...arr2]
console.log(arr1) // [ 1, 2, 3 ]
console.log(arr2) // [ 4, 5, 6 ]
console.log(arr3) // [ 1, 2, 3, 4, 5, 6 ]
将数组B追加到数组A中时
let arr1 = [1, 2, 3],
arr2 = [4, 5, 6],
arr3 = [7, 8]
arr1.push(...arr2) // 等价于arr1.push(4, 5, 6)
arr1 // [ 1, 2, 3, 4, 5, 6 ]
arr1.push(arr3) // 这种情况下,会将arr3当成一个元素
arr1 // [ 1, 2, 3, 4, 5, 6, [ 7, 8 ] ]
可替换函数的apply()方法
当函数的参数是一个正常的参数列表,而我们要传递的参数是个数组时,需要借助函数的apply方法进行调用。有了扩展运算符后就可以直接进行函数调用。
let arr = ['a', 'b', 'c']
function f (a, b, c) {}
f.apply(null, arr) // ES6之前的写法
f(...arr) // ES6扩展运算符的写法
数组的浅拷贝(用处不大)
let arr1 = [1, 2]
let arr2 = [...arr1]
arr2[0] = 4
arr2.push(3)
arr1 // [1, 2]
arr2 // [4, 2, 3]
将字符串(类数组)转为数组
let s = 'hello world'
console.log([...s]) // [ 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']