destructuring assignment
destructuring assignment 的中文名稱大部份人翻成「解構賦值」。
重點是「賦值」的方式,就像是鏡子般映射到所宣告的變數。
一、陣列的解構賦值
1、基本用法
var [a, b] = [1, 2]; console.log(a, b);
結果為
2、先宣告後指定值
var a, b; [a, b] = [1, 2]; console.log(a, b);
結果為
3、略過某些值
var a, b; [a, , b] = [1, 2, 3]; console.log(a, b);
結果為
4、rest operator
var a, b; [a, ...b] = [1, 2, 3]; console.log(a, b);
結果為
5、交換值
var a = 1, b = 9; [a, b] = [b, a]; console.log(a, b);
結果為
6、字串轉字元映射
var str = "Hi"; var [a, b] = str; console.log(a, b);
結果為
二、物件的解構賦值
1、基本用法
var { x: a, y: b } = { x: 1, y: 2 }; console.log(a, b);
結果為
2、shorthand syntax
經由上例可以理解下例
var { x: x, y: y } = { x: 1, y: 2 }; console.log(x, y);
結果為
上例的簡寫可等同於
var { x, y } = { x: 1, y: 2 }; console.log(x, y);
結果為
3、rest operator
var { x, y, ...rest } = { x: 1, y: 2, xx: 10, yy: 20 }; console.log(x, y, rest);
結果為
三、關於解構賦值錯誤的語法
{ a, b } = { a: 1, b: 2 };
當 curly bracket「{}」是在語句的最開頭時,在 javascript 語法裡,
其會被當作是陳述句。但該程式意圖很明顯是執行句。
解決的方式如下,可以在表達式的兩端加上 parentheses,
則該程式將成為執行句。
({ a, b } = { a: 1, b: 2 }); console.log(a, b);
結果為
四、解構賦值時的預設值
var [a = 100, b] = [, 2]; console.log(a, b);
結果為
var { x = 100, y = 50 } = {}; console.log(x, y);
結果為
五、在函式傳入參數定義中使用解構賦值
基本的函式用法如下
function sum(a, b) { return a + b; } console.log(sum(1, 2));
結果為
在函式傳入參數定義中使用解構賦值
function sum({ x: a, y: b }) { return a + b; } console.log(sum({ x: 1, y: 2 }));
結果為
等同於
function sum({ a, b }) { return a + b; } console.log(sum({ a: 1, b: 2 }));
結果為
在函式傳入參數定義中使用帶有預設值的解構賦值
function sum({ a, b }) { return a + b; } console.log(sum({ a= 1, b= 2 } = { a: 100, b: 200 }));
結果為
參考資料: