在形参里,...rest表示剩余参数运算符,
后边紧跟形参名 剩余参数是一个数组,如果没有传参,默认是空数组
写法
- function fn(形参1,形参2,... , ...rest){
-
- }
- fn(实参1,实参2,实参3,....)
rest在很多时候 可以用来 扮演arguments的角色
用rest实现arguments的效果
- function fn(...rest){
-
- }
- fn(实参1,实参2,实参3,....)
注意:...rest 必须要写在函数的所有形参之后 如果写在某一形参前面 就要出问题
写法:...
用法:...要被拓展的数据
作用:拓展运算符 可以 直接将 数组、伪数组中的数组项或成员 直接取出来(不需要循环)
写法
- let arr = [1,2,3,4,5];
- //打印所有数组项
- console.log(...arr);
拓展运算符 可以拓展所有的数组 和 伪数组(数组、set、map、元素集合、rest、arguments...)
注意:不能拓展对象(不绝对)
实际应用
浅拷贝(不能浅拷贝对象)
- /* //可以做浅拷贝
- let arr = [1,2,3,[4,5,6]];
- let arr1 = [...arr];
- console.log(arr,arr1);
- arr[0] = 0;
- console.log(arr,arr1);
- arr[3][0] = 9;
- console.log(arr,arr1); */
-
- //求最大值
- let arr = [1,2,3,4,5,6,7];
- //声明一个变量 记录最大值
- // let max = arr[0];
- // arr.forEach(function(item){
- // if(max
- // [item,max] = [max,item]
- // }
- // })
- // console.log(max)
-
- // let max = Math.max.apply(Math,arr);
- // console.log(max);
-
- let max = Math.max(...arr);
- console.log(max)
-
- //数组合并
- let arr1 = [1,2,3];
- let arr2 = [4,5,6];
- let arr3 = [...arr1,...arr2];
- console.log(arr3);
-
- //伪数组转数组
- let set = new Set([1,2,3,4,5]);
- let arr4 = [...set];
- console.log(arr4);
-
- //对象的浅拷贝
- let obj = {
- name:"张三",
- age:18,
- gender:"男",
- skills:["吃饭","睡觉","犯罪"]
- }
- let obj1 = {
- ...obj
- }
-
- //浅拷贝之后 还可以在新对象中 添加新属性
- let obj2 = {
- ...obj,
- hobbies:["读书","看报","睡觉","干活"],
- //我们还可以修改原本对象中的属性
- name:"王五"
- }
- console.log(obj,obj1)
- obj.name = "李四"
- console.log(obj,obj1)
- obj.skills[2] = "洗心革面,重新做人,缝纫机蹬出火星子";
- console.log(obj,obj1)
- console.log(obj2);