函数的拓展形参 rest
-
在形参里,...rest表示剩余参数运算符,
-
后边紧跟形参名 剩余参数是一个数组,如果没有传参,默认是空数组
-
写法
function fn(形参1,形参2,... , ...rest){ } fn(实参1,实参2,实参3,....)
- 作用:所有形参按照顺序 接收实参 最后 如果实参多于形参 多出来的实参 由 rest接收 rest是一个数组 多出来的实参 会作为 rest的数组项存在
-
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){ // [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);
-