作用
拷贝对象
let obj = {a:1,b:2};
let obj2 = {...obj};
obj.a = 7;
console.log(obj)//{a: 7, b: 2}
console.log(obj2)//{a: 1, b: 2}
拷贝数组
let arr = [1,2,3,4];
let arr2 = [...arr];
arr[0] = 10;
console.log(arr)//[10, 2, 3, 4]
console.log(arr2)//[1, 2, 3, 4]
合并对象
let obj1 = { a: 1, b: 1};
let obj2 = { c: 2, d: 2};
let obj3 = {...obj1 , ...obj2};
console.log(obj3)//{a: 1, b: 1, c: 2, d: 2}
自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉。同理,自定义的属性在拓展运算度前面,则变成设置新对象默认属性值。
合并数组
let arr = [1,2,3,4,5];
let arr2 = [6,7,8,9];
let arr3 = [...arr,...arr2];
console.log(arr3)//[1, 2, 3, 4, 5, 6, 7, 8, 9]
展开数组
let arr = [1,2,3,4,5];
console.log(...arr)//1 2 3 4 5
与解构赋值使用
let [a,...b] = [1,2,3,4,5];
a // 1
b// [2,3,4,5]
let [...b,a] = [1,2,3,4,5];
console.log(b,a)
//Rest element must be last element
//Rest 元素必须是最后一个元素
在数组与扩展运算符一起使用时,如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。
配合函数传参
普通传参
function show(a,b,c){
console.log(a,b,c);
}
show(1,2,3)
扩展符传参
function show(...value){
console.log(value);//[1, 2, 3]
}
show(1,2,3)