扩展运算符…的作用
一、数组:
1.构造数组console.log(1,...[2,3,4],5)//[1,2,3,4,5]
2.数组拷贝(浅拷贝)
let arr=[1,2,3]
let arr2=[...arr]//[1,2,3]
arr2.push(4)
console.log(arr2) //[1,2,3,4]
3.合并数组
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
var arr3 = [...arr1, ...arr2];// 将 arr2 中所有元素附加到 arr1 后面并返回
//等同于
var arr4 = arr1.concat(arr2);
console.log(arr3,arr4) // [0,1,2,3,4,5] [0,1,2,3,4,5]
二、 对象:
1.克隆对象(取出参数对象所有可遍历属性,然后拷贝到当前对象)
注意:克隆对象为number/string/boolean时,属于深拷贝;当为object/array时属于浅拷贝
var obj1 = { foo: 'bar', x: 42 };
var clonedObj = { ...obj1 };
console.log(clonedObj); // { foo: "bar", x: 42 }
2.合并对象
let age = {age: 15};
let name = {name: "Amy"};
let person = {...age, ...name};
console.log(person); // {age: 15, name: "Amy"}
注意: 自定义的属性在拓展运算符后面,则拓展运算符对象内部同名的属性将被覆盖掉; 自定义的属性在拓展运算度前面,则自定义的属性将被覆盖掉;
如:
let person = {name: "Amy", age: 15};
let someone = { ...person, name: "Mike", age: 17};
let someone1 = { name: "Mike", age: 17,...person};
console.log(someone); // {name: "Mike", age: 17}
console.log(someone1); // {name: "Amy", age: 15}
扩展运算符与的函数参数可以结合使用:
function f(x,y,z,v,w,u){
console.log(x,y,z,v,w,u)
}
var args = [0,1,5];
f(-1,...args,2,...[3]); // -1, 0, 1, 5, 2 ,3