significado
O operador de expansão (spread) é três pontos (...) )。 É como o inverso de um parâmetro de descanso, transformando um array em uma sequência de parâmetros separados por vírgula.
Esse operador é usado principalmente para chamadas de funções.
No código acima, array.push(...) itens) e add(...) números), ambos são chamadas para funções, e ambos utilizam operadores de extensão. Esse operador transforma um array em uma sequência de parâmetros. Operadores de extensão podem ser usados em combinação com parâmetros normais da função, o que é muito flexível.
Método de aplicação para arrays alternativos
Como o operador de extensão pode expandir o array, não há necessidade de usar o método apply para transformar o array em um argumento para a função.
Aqui está um exemplo prático de um operador de extensão substituindo o método apply, aplicando Math.max método para simplificar a escrita do maior elemento de um array.
O código acima diz que, como o JavaScript não fornece uma função para encontrar o maior elemento de um array, você só pode aplicar Math.max função para transformar o array em uma sequência de parâmetros e então encontrar o valor máximo. Com o operador de extensão, você pode usar Math.max diretamente. Outro exemplo é adicionando um array à cauda de outro array via a função push.
No método de escrita ES5 do código acima, os parâmetros do método push não podem ser arrays, então precisamos usar o método push de forma flexível através do método apply. Com o operador de extensão, o array pode ser passado diretamente para o método push. Aqui vai outro exemplo.
Ampliar a aplicação dos operadores
(1) Matrizes de fusão
O operador de extensão oferece uma nova forma de escrever a combinação de números.
(2) combinado com a atribuição desconstruída
Operadores de extensão podem ser combinados com atribuições desconstruídas para gerar arrays.
Se você usar o operador de extensão para atribuição de array, ele só pode ser colocado no último dígito do parâmetro, caso contrário, um erro será reportado.
(3) O valor de retorno da função
Funções JavaScript só podem retornar um valor e, se múltiplos valores precisarem ser retornados, apenas arrays ou objetos. Operadores de extensão oferecem uma solução alternativa para resolver esse problema.
O código acima pega uma linha de dados do banco de dados, estende o operador e o passa diretamente para o construtor Data.
(4) Corda
Operadores de extensão também podem transformar cadeias em arrays reais.
A escrita acima tem uma vantagem importante, que é que pode reconhecer corretamente caracteres Unicode de 32 bits.
A primeira forma de escrever o código acima é que o JavaScript reconhece caracteres Unicode de 32 bits como 2 caracteres, e não há problema com operadores de extensão. Assim, a função que retorna corretamente o comprimento da cadeia pode ser escrita assim:
Esse é o problema para qualquer função que envolva manipular caracteres Unicode de 32 bits. Portanto, é melhor reescrevê-los todos com operadores de extensão.
No código acima, se você não usar o operador de extensão, a operação de reversão de string está incorreta.
(5) Objetos que implementam a interface do Iterador
Qualquer objeto na interface do Iterador pode ser convertido em um verdadeiro array com um operador de extensão.
No código acima, o método querySelectorAll retorna um objeto nodeList. Não é um arranjo, mas um objeto semelhante a um array. Nesse caso, o operador de extensão pode transformá-lo em um array real porque o objeto NodeList implementa a interface Iterador. Para aqueles objetos semelhantes a arrays que não possuem uma interface de iterador implantada, o operador de extensão não pode transformá-los em um array real.
No código acima, o arrayLike é um objeto semelhante a um array, mas sem implantar a interface Iterador, o operador de extensão reportará um erro. Nesse caso, você pode usar o método Array.from para converter arrayLike em um array real.
(6) Estruturas de mapeamento e conjunto, funções geradoras
O operador de extensão chama internamente a interface Iterador da estrutura de dados, então qualquer objeto com interface Iterador pode usar um operador de extensão, como uma estrutura Map.
Quando a função Geradora roda, ela retorna um objeto traverser, então operadores de extensão também podem ser usados.
No código acima, a variável go é uma função Geradora e, após a execução, retorna um objeto de travessão, e executar um operador de extensão nesse objeto de travessia converte os valores obtidos a partir de uma travessia interna em um array. Se você usar um operador de extensão para um objeto sem interface iteradora, um erro será reportado.
|