Três pontos úteis - o resto e a dispersão em JavaScript
Lukasz Kolko
O ECMAScript 2015 trouxe-nos muitas novidades, que resultaram num grande número de melhorias. Hoje vamos dar uma olhada mais de perto em dois recursos que facilitam a vida. Conheça os parâmetros de descanso e a sintaxe de propagação.
A sintaxe restante permite nós para representar um número indefinido de argumentos como um array. Veja uma função que soma todos os argumentos passados.
O operador de dispersão permite-nos expandir objectos iteráveis em elementos individuais. Esta funcionalidade é o oposto do que conseguimos com os restantes parâmetros. Pode ser aplicado a todos os iteráveis, como arrays, objectos, conjuntos, mapas, etc.
const sum = (x, y, z) => x + y + z;
const numbers = [1, 2, 3];
console.log(soma(...números)); // 6
A sintaxe de propagação vai efetivamente um nível mais profundo ao copiar uma matriz. Um nível significa que o primeiro nível de referências é copiado.
Note-se que a cópia do objeto que é criada é um novo objeto com todas as propriedades do objeto original mas sem nenhuma das suas informações de protótipo.
Note-se que a sintaxe de propagação cria uma cópia "superficial" do objeto, pelo que a propriedade "wallet" será copiada apenas como uma referência ao sub-objeto original. Para uma clonagem profunda, pode utilizar a abordagem JSON stringify/parse ou o método 'cloneDeep' fornecido pelo Lodash, dependendo da complexidade do seu objeto. Em alguns casos, este método também pode ser útil:
let personCopy = { ...person, wallet = {...person.wallet}};
Podemos adicionar condicionalmente propriedades a um novo objeto que estamos a criar, utilizando o operador de propagação juntamente com a avaliação de curto-circuito.