Variable Destructuring

Definition: Allows you to extract values from objects in an array according to a certain pattern.

Array destructuring assignment
var [foo, bar] = [1, 2] // foo 1 bar 2

Destructuring assignment allows you to specify a default value. If the default value is an expression, the expression is evaluated lazily.

var [foo = true] = [] //foo true
var f = () => 1
var [foo = f()] = [null] //foo null
var [foo = f()] = [undefined] //foo 1
Object Destructuring

The difference between object structure assignment and array is that the variable must have the same name as the attribute

var {bar, foo} = {foo: "aaa", bar: "bbb"}
//or
({bar, foo}) = {foo: "aaa", bar: "bbb"}

Tips: (…) is a syntax that does not require declaration when using object literal destructuring assignment. However, the preceding statement needs a semicolon to avoid being treated as a function.

Object destructuring allows you to easily assign existing object methods to a variable.

let {log, sin, cos} = Math
Destructuring Function Parameters
[[1, 2], [3, 4]].map(([a, b]) => a + b);

Destructuring of function parameters can also use default values

function move({x = 0, y = 0} = {}) {
  return [x, y]
};
move({x: 3, y: 8}) //[3,8]

If you remove the ={}, you will get an error when executing move().

Uses of destructuring assignment

Returning multiple values from a function

function foo() {
  return [1, 2, 3]
}
var [a, b, c] = foo()

Function parameter definition

function f({x, y, z}) {}
f({z: 3, x: 1, y: 2})

Extract json

var json = {
  id: 42,
  status: "ok",
  data: [1, 2, 3, 4,]
}
let {id, status, data} = json

Traversing the map deconstruction

for (let [key, value] of map) {};

Get the key

for (let [key] of map) {};

Just want to get the value

for (let [, value] of map) {};

Input module specification method