上一节学习变量的结构赋值,大大提高了开发效率,继续学习扩展运算符和rest运算符
对象扩展运算符(…)
在定义一个方法的时候,我们可以允许传入的参数是不确定的,这时候可以用对象扩展运算符来做参数,看一个简单的例子:
function test(...arg){
console.log(arg[0]);
console.log(arg[1]);
console.log(arg[2]);
}
test(1,2,3);
控制台会依次输出1,2,3,当打印未传入的参数时,会提示undefined
扩展运算符的用处
可以利用扩展运算符实现数组的深拷贝,我们知道数组是属于引用类型,直接使用等号赋值,复制的其实一个对内存堆地址的引用,这就导致改变其中一个数组的值,另一个也会受到影响
let arr = [1,2,3];
let arr2 = arr;
arr2.push(4);
console.log(arr); //[1,2,3,4];
可以看到,当我们改变arr2数组的值时,arr数组也被改变了,这是我们所不想的,可以利用扩展运算符来解决这个问题
let arr1 = [1,2,3];
let arr2 = [...arr1];
arr2.push(4);
console.log(arr1); //[1,2,3]
console.log(arr2); //[1,2,3,4]
现在我们看到arr2的改变并不会影响arr1,扩展运算符就解决了我们的问题
rest运算符
rest运算符和对象扩展运算符其实很像,都是用…(三个点)来表示,先看一个例子
function test(first,...arg){
console.log(arr.length);
}
test(1,2,3,4,5,6,7);
控制台输入的参数长度为6,说明arr里面有6个数组元素,并没有包含first参数

