解構(destructuring assignment), 也稱解構指派,這種文法可以友善的将數組元素或對象屬性賦成新的變量。
我們假設一個代碼場景,我們用一個數組或對象包含2個元素,來代表一個坐标軸的坐标值:
//使用數組
var coords1 = [10, 20]; // x軸10, y軸20
//使用對象
var coords2 = {x: 50, y: 100}; // x軸50, y軸100
然後,我們要将這兩個坐标值單獨拿出來指派成2個變量,通常會這麼做:
var x1 = coords1[0];
var y1 = coords2[1];
var x2 = coords2.x;
var y2 = coords2.y;
是的,以前我們就是這麼做的!而現在有了解構指派文法,我們可以更加簡單一些了,下面的示例代碼和上面的效果是完全等價的:
var [x1, y1] = coords1;
var {x2, y2} = coords2;
在解構指派的時候,也可以給變量設定預設值:
var [x=100, y=100] = [10];
//x=10, y=100
在解構數組的時候,有些值不想要,可以這樣做:
var [x,,y]=[10, "hello", 20];
也可以在解構指派的時候,使用Rest文法:
var [a, ...b] = [1, 2, 3, 4, 5];
//a=1
//b=[2, 3, 4, 5]
在解構對象的時候,你想賦成和對象屬性名不一樣的變量名,你可以這麼做:
var {a:x, b:y} = { a: 1, b: 2 }
//x=1
//y=2
解構指派也可以用在函數參數清單上:
function test({x, y}) {
return x + y;
}
var obj = {x: 1, y: 5};
test(obj)