Destructuring
可以將值從陣列或是物件裡取出並設定到變數上
syntax
1 2 3
| [a, b] = [1, 2] [a, b, ...rest] = [1, 2, 3, 4, 5] {a, b} = {a:1, b:2}
|
Destructuring arrays
1 2 3 4 5 6 7 8 9
| var foo = ["one", "two", "three"];
// without destructuring var one = foo[0]; var two = foo[1]; var three = foo[2];
// with destructuring var [one, two, three] = foo;
|
其他用法
1.Multiple-value returns
1 2 3 4 5 6
| function f() { return [1, 2]; } var a, b; [a, b] = f(); console.log("A is " + a + " B is " + b);
|
2.Ignoring some returned values
1 2 3 4 5 6 7
| function f() { return [1, 2, 3]; } var a, b; [a, ,b] = f(); console.log("A is " + a + " B is " + b); // A is 1 B is 3
|
3.衍伸用法: Pulling values from a regular expression match
1 2 3 4 5 6
| var url = "https://developer.mozilla.org/en-US/Web/JavaScript";
var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url); var [, protocol, fullhost, fullpath] = parsedURL;
console.log(protocol); // logs "https"
|
Destructuring objects
1 2 3 4 5
| var o = {p: 42, q: true}; var {p, q} = o;
console.log(p); // 42 console.log(q); // true
|
另外一種用法, 將物件裡的值設定到新的變數名稱上
1 2 3 4 5 6 7 8 9
| // syntax // {object.propertyName: VariableName} = object
// Assign new variable names var o = {p: 42, q: true}; var {p: foo, q: bar} = o;
console.log(foo); // 42 console.log(bar); // true
|
衍生用法: Function argument defaults
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var [missing = true] = []; console.log(missing); // true
var { message: msg = "Something went wrong" } = {}; console.log(msg); // "Something went wrong"
var { x = 3 } = {}; console.log(x); // 3
function removeBreakpoint({ url, line, column }={}) { // ... }
|
1 2 3 4 5 6 7 8 9 10
| function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) { console.log(size, cords, radius); // do some chart drawing }
drawES6Chart({ cords: { x: 18, y: 30 }, radius: 30 });
|
另外一種情境 Module (non-ES6) loading
1
| const { Loader, main } = require('toolkit/loader');
|
REF: Several demos and usages for ES6 destructuring.