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 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被...