...運算符可用于淺拷貝
- 深拷貝
let obj1={name:'Jacl'}
let obj2=obj1
obj1["age"]=12
obj2//{name: "Jacl", age: 12}
用Object.assign(obj)實現(xiàn)深拷貝
let obj1={name:'Jacl'}
let obj2=Object.assign( obj1)
obj1["age"]=12
obj2//{name: "Jacl", age: 12}
- 淺拷貝
let obj1={name:'Jacl'}
let obj2={...obj1}
obj1["age"]=12
obj2//{name: "Jacl"}
當(dāng)然,我們也可以在淺拷貝的同時修改所獲對象的屬性
let obj1={name:'Jacl'}
let obj2={...obj1,name:'Zha'}
obj1["age"]=12
obj2//{name: "Zha"}
用Object.assign({}, obj)實現(xiàn)淺拷貝
let obj1={name:'Jacl'}
let obj2=Object.assign({}, obj1)
obj1["age"]=12
obj2//{name: "Jacl"}
數(shù)組同理
[...arr1]
- 那么如果想對[{},{},{}...]形式的數(shù)據(jù)對象進行淺拷貝呢?

一層淺拷貝(不符合要求)

二層淺拷貝(符合要求)
...運算符也有其它用處
- 類型轉(zhuǎn)換
set轉(zhuǎn)arr(數(shù)組去重)
let s1=new Set([2,1,3,4,3,1])
let arr=[...s1]
arr //[2, 1, 3, 4]
- 獲取對象屬性/方法
let obj={name:'Li',age:2}
let {name}={...obj}
name//"Li"
- 擴充對象屬性(增加數(shù)組元素)
let a=[1,2,3]
let b=[4,...a]
b//[4, 1, 2, 3]
let x={name:'Li'};
let y={age:3,...x};
y//{age: 3, name: "Li"}