扩展运算符
扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值。
let foo = (a, b, c) => {
console.log(a);
console.log(b);
console.log(c);
};
let arr = [1, 2, 3];
// 传统写法
foo(arr[0], arr[1], arr[2]);
// 扩展运算符
foo(...arr);
特殊用法
// 数组深拷贝
let arr = [1, 2, 3];
let arr1 = arr;
let arr2 = [...arr];
console.log(arr1 === arr); // true,说明arr1和arr指向同一个数组
console.log(arr2 === arr); // false,说明arr2和arr指向不同数组
// 把一个数组插入另一个数组字面量
let arr = [1, 2, 3];
let arr2 = [...arr, 4, 5, 6];
console.log(arr2); // [1, 2, 3, 4, 5, 6]
// 字符串转数组
let str = 'hello';
let arr = [...str];
console.log(arr); // ["h", "e", "l", "l", "o"]
rest运算符
rest运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组。
// 主要用于不定参数,所以ES6开始可以不再使用arguments对象
let fn = (...args) => {
for (let item of args) {
console.log(item);
}
};
fn(1, 2, 3);
// 1
// 2
// 3
let fn1 = (a, ...args) => {
console.log(a);
console.log(args);
}
fn1(1, 2, 3, 4);
// 1
// [2, 3, 4]
rest运算符配合解构使用
let [a, ...rest] = [1, 2, 3, 4];
console.log(a); // 1
console.log(rest); // [2, 3, 4]
总结:同样是三个点。三点放在形参或者等号左边为rest运算符; 放在实参或者等号右边为spread运算符,或者说,放在被赋值一方为rest运算符,放在赋值一方为扩展运算符。
网友评论