上一节学习变量的结构赋值,大大提高了开发效率,继续学习扩展运算符和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参数