陣列的解構賦值

2021-07-25 06:39:40 字數 1536 閱讀 2359

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 [head,...tail] = [1,2,3,4];

head // 1

tail // [2,3,4]

let [x,y,...z] = ['a'];

x // "a"

y // undefined

z //

解構賦值允許制定預設值

var [foo = true] = ;

foo // true

[x,y='b'] = ['a'];

// x='a', y='b'

注意,es6內部使用嚴格相等運算子(===),判斷乙個位置是否有值。

所以,如果乙個陣列成員不嚴格等於undefined,預設值是不會生效的。

var [x=1] = [undefined];

x //1

var [x=1] = [null];

x // null

如果預設值是乙個表示式,那麼這個表示式是惰性求值的,即只有在用到的時候,才會求值:

functionf()

let [x=f()] = [1];

上面的**中,因為x能取到值,所以函式f()根本不會執行。上面的**其實等價於下面的**:

let x;

if([1][0] === undefined)else

預設值可以引用解構賦值的其他變數,但該變數必須已經宣告:

let [x=1,y=x] = ;

// x=1; y=1

let [x=1,y=x] = [2];

// x=2; y=2

let [x=1,y=x] = [1,2];

// x=1; y=2

let [x=y,y=1] = ; // referenceerror

上面最後乙個表示式,因為x用到預設值是y時,y還沒有宣告。

解構賦值 陣列的解構賦值

什麼是解構賦值?es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 destructuring 我的理解是 允許宣告一種模式 陣列 物件等 裡面包含乙個或多個變數,再分別對這些變數遍歷 按照對應位置 賦值。以前,為變數賦值,只能直接指定值。let a 1 let b 2 通...

陣列的解構賦值

es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。es5宣告變數 let a 1 let b 2 let c 3 es6解構賦值 let a,b,c 1,2,3 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。下面是一些使用巢狀陣列進...

陣列的解構賦值

以前的寫法.為變數賦值,只能直接指定值 let a 1 let b 2 let c 3 es6的允許寫法 let a,b,c 1,2,3 從陣列中提取值,按照對應位置,對變數賦值 console.log a,b,c 1,2,3 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被...