es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(destructuring)。
以前,為變數賦值,只能直接指定值。
let a = 1;
let b = 2;
let c = 3;
es6 允許寫成下面這樣。
let [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
let [foo] = ;
let [bar, foo] = [1];
以上兩種情況都屬於解構不成功,foo
的值都會等於undefined
。
如果等號的右邊不是陣列(或者嚴格地說,不是可遍歷的結構),那麼將會報錯。
// 報錯
let [foo] = 1;
let [foo] = false;
let [foo] = nan;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};
事實上,只要某種資料結構具有 iterator 介面,都可以採用陣列形式的解構賦值。
function* fibs()
}let [first, second, third, fourth, fifth, sixth] = fibs();
sixth // 5
上面**中,fibs
是乙個 generator 函式(參見《generator 函式》一章),原生具有 iterator 介面。解構賦值會依次從這個介面獲取值。
預設值
解構賦值允許指定預設值
let [foo=true]=; // foo=true
let [x,y='b']=['a'] //x='a', y='b'
let [x,y='b']=['a',undefined] // 結果同上
注意:es6內部使用嚴格相等運算子(===),判斷乙個位置是否有值。所以只有當乙個陣列成員嚴格等於undefined,預設值才會生效。
let [x=1]=[null] // x=null
預設值沒有生效,因為null不嚴格等於undefined
解構不僅可以用於陣列,還可以用於物件。
let = ;
foo // "aaa"
bar // "bbb"
物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。
如果變數名與屬性名不一致,必須寫成下面這樣
let =;
// baz:aaa
物件解構也可以有預設值
var ={} // x=3
var = // x=5,y=3
var = ; // y = 5
字串也可以解構賦值。這是因為此時,字串被轉換成了乙個類似陣列的物件。
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
類似陣列的物件都有乙個length
屬性,因此還可以對這個屬性解構賦值。
let = 'hello';
len // 5
函式的引數也可以使用解構賦值。
function add([x,y])
console.log(add([2,5]));
// 7
函式add的引數表面上是乙個陣列,但在傳入引數的那一刻,陣列引數被解構成變數x和y。
函式引數的解構也可以使用預設值。
function move(={})
console.log(move()) //[3,8]
console.log(move()) //[3,0]
console.log(move({})) // [0,0]
console.log(move()) //[0,0]
(1)交換變數的值
let x=1;
let y=2;
[x,y]=[y,x];
(2)函式返回多個值
// 返回乙個陣列
function example1()
let [a, b, c] = example1();
// 返回乙個物件
function example2() ;
}let = example2();
(3)函式引數的定義
解構賦值可以方便地將一組引數與變數名對應起來。
// 引數是一組有次序的值
function f([x, y, z])
f([1, 2, 3]);
// 引數是一組無次序的值
function f()
f();
(4)提取 json 資料
解構賦值對提取 json 物件中的資料,尤其有用。
let jsondata = ;
let = jsondata;
console.log(id, status, number);
// 42, "ok", [867, 5309]
es6入門 變數的解構賦值
從陣列和物件中提取值,對變數進行賦值 陣列是位置對應,物件是屬性對應。可使用var let const進行宣告賦值。傳統的賦值語句 var str hello var str1 word var who you 1.陣列的解構賦值 位置對應 傳統的賦值語句可更改為 let str,str1,who ...
es6變數解構賦值
es6允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。解構賦值在實際開發中可以大量減少我們的 量,並且讓我們的程式結構更清晰。陣列的解構賦值 let a,b 1 2 console.log a 1 console.log b 2 上面的 表示,可以從陣列中提取值,按照位置的物件...
ES6變數解構賦值
es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 es6之前我們申明多個變數需要按照下面的方法 let l a 1 let b 2 let c 3 let d 4 或者 let a 1,b 2,c 3,d 4 現在我們可以更加簡便 let a,b,c,d 1,2,3,4 ...