延展操作符 = ...可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开,还可以在构造对象时,将对象表达式按key-value的方式展开。
函数调用
function(...iterableObj)
数组构造或者字符串
[...iterableObj,'4',...'hello',6]
es2018下构造对象时,进行克隆或者属性拷贝
let objClone={...obj}
function sum(x,y,x){
return x+y+z
}
const numbers = [1,2,3]
//不使用延展操作符
sum.apply(null, numbers)
//使用延展操作符
sum(...numbers)
//或者在构造数组时
//如果没有展开语法,只能组合使用push,splice,concat,slice
//将已有数组元素变为新数组的一部分
const people=['jan','tom']
const person = ['ali',...people,'alliance','ketty']
console.log(person)//Ali,jan,tom,alliance,ketty
//另外,还有一个例子
var arr =[1,2,3]
var arr2=[...arr]
arr2.push(4)
console.log(arr2)//1,2,3,4
展开语法与Obj.assign()行为一致,都是执行浅拷贝,也就是只遍
历一层,不会遍历父对象相关的数据
var arr1=[0,1,2]
var arr2=[3,4,5]
var arr3=[...arr1,...arr2] 等同于var arr4 = arr1.concat(arr2)
es2018中增加了对对象的支持
var obj1 = {foo:1,foo2:2}
var obj2={foo3:12,foo4:30}
var clonedObj={...obj1}
var mergedObj={...obj1,...obj2}
网友评论