展開運算符,將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列
合并數(shù)組
let a = [1,2,3];
let b = [4,5,6];
let c = [...a,...b]; // [1,2,3,4,5,6]
替代apply
function f(a,b,c){
console.log(a,b,c)
}
let args = [1,2,3];
// 以下三種方法結(jié)果相同
f.apply(null,args)
f(...args)
f(1,2,3)
function f2(...args){
console.log(args)
}
f2(1,2,3) // [1,2,3]
function f3(){
console.log(Array.from(arguments))
}
f3(1,2,3) // [1,2,3]
Array.from() 可以通過以下方式來創(chuàng)建數(shù)組對象:
- 偽數(shù)組對象(擁有一個
length屬性和若干索引屬性的任意對象) - 可迭代對象(可以獲取對象中的元素,如 Map和 Set 等)
let a = [1,2,3];
let b = [4,5,6];
Array.prototype.push.apply(a,b);
// 或
a.push(...b)
// 兩種方法取其一
解構(gòu)賦值
let a = [1,2,3,4,5,6]
let [c,...d] = a
console.log(c); // 1
console.log(d); // [2,3,4,5,6]
//展開運算符必須放在最后一位
字符串轉(zhuǎn)為數(shù)組,正確識別 32 位的 Unicode 字符
[...'siva'] // ['s','i','v','a']
[...'x\uD83D\uDE80y'].length // 3
具有 Iterator 接口的對象,轉(zhuǎn)換成數(shù)組
var nodelist = document.querySelectorAll('div');
console.log([...nodelist]) // 轉(zhuǎn)化成數(shù)組
var map = new Map([[1,11],[2,22],[3,33]]);
console.log([...map.keys()]); // [1,2,3]
淺拷貝
//數(shù)組
var a = [1,2,4]
var b = [...a]
a.push(6)
console.log(b) // [1,2,4]
//對象
var a = {a:1}
var b = {...a}
a.a = 5
console.log(b.a) // 1