对拓展运算符的理解

50 阅读2分钟
ES6中拓展运算符

ES6中的拓展运算符(spread operator)用三个连续的点(...)表示,它可以将一个数组或类数组对象(例如arguments对象、NodeList对象)展开成单个元素序列,或者将一个对象展开成键值对序列。拓展运算符可以用在函数调用、数组字面量、对象字面量等多种场景中。

以下是拓展运算符的几种常见使用场景:

  1. 函数调用时展开数组:可以将一个数组中的元素作为单独的参数传递给函数。例如:
function myFunction(x, y, z) {
  console.log(x, y, z);
}

const arr = [1, 2, 3];
myFunction(...arr); // 输出: 1 2 3
  1. 将数组合并成新数组:可以使用拓展运算符将两个或多个数组合并成一个新数组。例如:
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [...arr1, ...arr2];
console.log(arr3); // 输出: [1, 2, 3, 4, 5, 6]
  1. 复制数组或对象:可以使用拓展运算符复制一个数组或对象,而不是改变原始的数组或对象。例如:
const arr = [1, 2, 3];
const arrCopy = [...arr];
console.log(arrCopy); // 输出: [1, 2, 3]

const obj = {a: 1, b: 2};
const objCopy = {...obj};
console.log(objCopy); // 输出: {a: 1, b: 2}
  1. 在数组中插入元素:可以使用拓展运算符在数组中插入元素。例如:
const arr = [1, 2, 4, 5];
const arrCopy = [...arr.slice(0, 2), 3, ...arr.slice(2)];
console.log(arrCopy); // 输出: [1, 2, 3, 4, 5]
  1. 合并对象:可以使用拓展运算符将两个对象合并成一个新对象。如果对象中有相同的属性名,则后面的属性会覆盖前面的属性。例如:

apache

const obj1 = {a: 1, b: 2};
const obj2 = {b: 3, c: 4};
const obj3 = {...obj1, ...obj2};
console.log(obj3); // 输出: {a: 1, b: 3, c: 4}

需要注意的是,拓展运算符只能展开可迭代对象(iterable),例如数组、字符串、Map、Set等,而普通的对象不是可迭代对象。

6 将字符串转为数组

[...'hello']     // ['h', 'e', 'l', 'l', 'o']