Trata-se de uma sintaxe que permite “desembrulhar” valores de um objeto ou um array antes de atribuí-los à variáveis.
O exemplo a seguir “desembrulha” os valores de um array em duas variáveis.
> const [ peso, idade ] = [ 70, 36 ];
> console.log(peso)
70
> console.log(idade)
36
Outro exemplo usando arrays.
> const [ peso, idade, ...resto ] = [ 70, 36, 170, 1984 ]
> console.log(peso)
70
> console.log(idade)
36
> console.log(resto)
[ 170, 1984 ]
Também é possível “desembrulhar” propriedades de objetos.
> const { peso, idade } = { peso: 70, idade: 36 }
> console.log(peso)
70
> console.log(idade)
36
Mais um exemplo usando objetos.
> const { peso, idade, ...resto } = { "peso": 70, "idade": 36, "altura": 170, "nascimento": 1984 }
> console.log(peso)
70
> console.log(idade)
36
> console.log(resto)
{ altura: 170, nascimento: 1984 }
É possível ainda construir novos arrays “desembrulhando” valores de outros arrays.
> const array1 = [ 70, 36 ]
> const array2 = [ "setenta", "trintaeseis" ]
> const array3 = [...array1, ...array2 ]
> console.log(array3)
[ 70, 36, 'setenta', 'trintaeseis' ]
Da mesma forma é possível construir novo objetos “desembrulhando” valores de outros objetos.
> const obj1 = { "idade": 36, "peso": 70 }
> const obj2 = { "nome": "Fabio" }
> const obj3 = { "funcao": "Piloto", ...obj1, ...obj2 }
> console.log(obj3)
{ funcao: 'Piloto', idade: 36, peso: 70, nome: 'Fabio' }
A sintaxe de destructuring também serve para passagem de parâmetros para funções.
> f = function([idade, peso]) {
console.log("idade", idade);
console.log("peso", peso);
}
> f([ 36, 70 ])
idade 36
peso 70
O mesmo do exemplo acima, mas usando um objeto.
> f = function ({ idade, peso }) {
console.log("peso", peso);
console.log("idade", idade);
}
> f({ "peso": 70, "idade": 36 })
peso 70
idade 36
Referências
- https://cursos.alura.com.br/destructuring-em-js-c308
- Aula da https://github.com/juunegreiros
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment