基本用法:
es6允許按照一定的模式從陣列和物件中提取值,然後對變數進行賦值,這被稱之為解構。
let [a, b, c] = [1, 2, 3];
這種寫法屬於「模式匹配」,只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。
let [foo, [[bar], baz]] = [1, [[2], [3]];
let [ , , third] = ['foo', 'bar', 'baz'];
let [x, , y] = [1, 2, 3];
let [head, ...tail] = [1, 2, 3, 4];
tail; // [2, 3, 4]
let [x, y, ...z] = ['a'];
y; // undefined
z; //
解構不成功,變數的值等於undefine。
不完全解構:
let [a, b] = [1, 2, 3];
a; // 1
b; // 2
let [a, [b], c] = [1, [2, 3], 4];
a; // 1
b; // 2
c; // 4
如果等號右邊的不是陣列,則會報錯。
預設值:
let [foo = true] = ;
foo; // true
es6內部使用嚴格相等運算子(===)判斷乙個位置是否有值,所以如果乙個陣列不嚴格等於undefined,預設值是不會生效的。
let [x = 1] = [undefined];
x; // undefined
let [x = 1] = [null];
x; // null
預設值也可以是乙個表示式,那麼這個表示式是惰性求值的(只用在用到時才會求值)
預設值可以引用解構賦值的其他變數,但該變數必須已經宣告。
let = ;
foo; // 'aaa'
bar; // 'bbb'
物件的解構與陣列的解構有乙個重要的不同,陣列的元素按次序排列,變數的取值由位置決定。而物件的屬性沒有次序,變數名與屬性名同名則可取道正確的值。
let = ;
abc; // undefined
如果變數名和屬性名不一致,必須寫成下面這樣
let = ;
abc; // 'aaa'
實際上說明,物件的解構就是以下形式的簡寫:
let = ;
物件的解構,首先找到同名的屬性,再賦值給對應的變數。
後者被賦值,前者只是匹配模式。
物件的解構和陣列的解構相同,也可用於巢狀的資料結構。
物件的解構也可以指定預設值
const [a, b, c, d, e] = 'hello';
a // 'h'
b // 'e'
c // 'l'
d // 'l'
e // 'o'
//陣列物件有length屬性
let = 'hello';
len // 5
解構的規則是,若等號右邊的值不是物件或者陣列,就先轉轉換為物件。
let = 123
// 由於number和boolean物件都有tostring屬性,所以s能取到值
由於undefined和null無法轉換為物件,所以在解構賦值時會出錯。
function add([x, y]) ;
add([1, 2]) // 3
函式引數的解構,也可使用預設值。(undefined會觸發函式的預設值)
交換變數的值
從函式返回多個值
函式引數的定義
提取json資料
函式引數的預設值
遍歷map結構
輸入模組的指定方法
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 ...
es6 變數解構賦值
1.陣列的解構賦值 等號兩邊的模式相同,左邊的變數就會被賦予對應的值 預設值 undefined型別只有乙個值,即undefined。當宣告的變數還未被初始化時,變數的預設值為undefined。null型別也只有乙個值,即null。null用來表示尚未存在的物件,常用來表示函式企圖返回乙個不存在的...