一、扩展运算符...
扩展运算符用于取出参对象的所有可遍历属性,然后拷贝到当前对象之中(深层拷贝)
//扩展运算符 ...
var arr = [1, 2, 3];
var arr2 = arr;//浅层拷贝 指向同一地址
var arr3 = [...arr];//互不影响
如代码所示,arr2=arr为浅层拷贝,当更改arr的值,arr2也会跟着改变,arr3用...赋值的时候相当于重新分配了一个地址给arr3,所以当更改arr的时候,arr3不会改变。
(1)利用...运算符将已经有的数组快速赋值给新数组,如arr3
(2)...运算符可以把类数组转换为数组,然后才可以用数组里边的方法,例如pop,push
(3)...运算符可以实现两个数组的合并,例如如下代码
var arr4 = [1, 2, 3];
var arr5 = [4, 5, 6];
var arr6 = [...arr4, ...arr5];//合并数组 也可以为数组的一部分
arr6的值应为[1,2,3,4,5,6]
(4)对象的合并:合并两个对象的时候,如果两个对象没有相同的属性时,新对象会包含两个对象的全部属性;如果两个对象有相同的属性的时候,后边的对象属性会覆盖掉前边对象的同名属性。例如如下代码
let obj={
name:'lisi',
data:'12.05'
};
let obj1={
name:'sv',
age:12
}
let obj3={...obj,...obj1};
obj3应该的属性以及值应该为age: 12,data: "12.05",name: "sv"
二、rest以及arguments
1.rest
给函数传参的时候,rest用来取到除指定参数以外剩余的参数
function fn(a,b,...rest){
console.log(rest);
}
fn(1,2,3,4,5);
调用fn函数的时候,传入1,2,3,4,5分别赋值给形参a=1,b=2剩余参数以数组的方式赋值给rest,即rest=[3,4,5],当仅仅剩余一个数值赋值给rest的时候,rest仍然为一个数组,当没有数值赋值给rest的时候,rest为一个空数组。
2.arguments
arguments与rest的用法相似,不同的是arguments指的是传入的全部数值
function fn(a,b,...rest){
console.log(arguments);
}
fn(1,2);
arguments的同样是一个数组,代码段输出应该为[1,2],没有参数传入的话,arguments时一个空数组