6.5.3展开运算符spread
【1】原因:数组的拆散之前学习过apply函数,但是apply函数不那么好用,因为apply的本职工作不是拆散数组,而是替换this,是在替换this的同时拆散的数组
【2】解决:如果希望单纯的拆散数组,就使用 … 展开运算符
【3】如何使用:在调用函数时,函数名(...数组名);
【4】原理:…先将数组拆散成多个实参值,再依次分别传给函数的每个形参变量。
【5】…的作用:
i:定义函数时,形参列表中的…表示收集
ii:调用函数时,实参列表中的…表示拆散
【6】示例
var arr=[1,5,34,8];
// 找到数组中的最大值
console.log(Math.max(1,5,34,8));
// 错误的结果
console.log(Math.max(arr));
// 使用apply函数打散数组,因为其中与this指向没有任何关系,所以第一个参数随便写啥都行
console.log(Math.max.apply("",arr));
console.log(Math.max.apply(null,arr));
console.log(Math.max.apply(arr,arr));
console.log(Math.max.apply(Array,arr));
// 正确做法: 使用展开运算符...将数组拆散
console.log(Math.max(...arr));
【7】语法糖
语法糖的含义:一些简写,可以简化代码
i:复制一个数组: var arr2=[…arr1];
ii:合并多个数组和元素:
var arr3=[...arr1, 元素2, ...arr2, 元素3]
iii:克隆一个对象: var obj2={…obj1};
iv:合并多个对象和属性:
var obj3={
…obj1, 属性名:属性值, …obj2, 属性名:属性值
}
示例:
// 语法糖
var arr1=[1,1,2];
// 复制一个数组
var arr2=[...arr1];
// 合并多个数组和元素
var arr3=[1,...arr2,7,...arr1];
var obj={x:1,y:3};
// 克隆一个对象
var obj1={...obj};
// 合并多个对象和属性
var obj2={...obj,i:5,...arr1}