ES6陣列的解構賦值
阿新 • • 發佈:2018-11-03
ES6允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(Destructuring)。
以前,為變數賦值,只能直接指定值。
var a = 1;
var b = 2;
var c = 3;
ES6允許寫成下面這樣。
var [a, b, c] = [1, 2, 3];
本質上,這種寫法屬於“模式匹配”,只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。下面是一些使用巢狀陣列進行解構的例子。
let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3 let [ , , third] = ["foo", "bar", "baz"]; third // "baz" let [x, , y] = [1, 2, 3]; x // 1 y // 3 let [head, ...tail] = [1, 2, 3, 4]; head // 1 tail // [2, 3, 4] let [x, y, ...z] = ['a']; x // "a" y // undefined z // []
如果解構不成功,變數的值就等於undefined。
var [foo] = [];
var [bar, foo] = [1];
以上兩種情況都屬於解構不成功,foo的值都會等於undefined。
另一種情況是不完全解構,即等號左邊的模式,只匹配一部分的等號右邊的陣列。這種情況下,解構依然可以成功。
let [x, y] = [1, 2, 3];
x // 1
y // 2
let [a, [b], d] = [1, [2, 3], 4];
a // 1
b // 2
d // 4
上面兩個例子,都屬於不完全解構,但是可以成功。
如果等號的右邊不是陣列(或者嚴格地說,不是可遍歷的結構,參見《Iterator》一章),那麼將會報錯。
// 報錯
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};
上面的表示式都會報錯,因為等號右邊的值,要麼轉為物件以後不具備Iterator介面(前五個表示式),要麼本身就不具備Iterator介面(最後一個表示式)。
解構賦值不僅適用於var命令,也適用於let和const命令。
var [v1, v2, ... vN ] = array; let [v1, v2, ... vN ] = array; const [v1, v2, ...vN ] = array;
對於Set結構,也可以使用陣列的解構賦值。
let [x, y, z] = new Set(["a", "b", "c"]);
x // "a"
內容轉自https://www.cnblogs.com/-simon/p/5941117.html