1. 程式人生 > >ES6陣列的解構賦值

ES6陣列的解構賦值

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