Advanced javascript datatypes Flashcards
Tipos avançados do javascript como Map, Set, Reflect
O que são Generators/Iterators?
Os generators são usados para retornar os resultados de uma função em formato de lista para entregar os resultados sob demanda.
Os iterators podem ser usados para obter toda a lista de valores de um generator, como por exemplo o spread operator, Array.from(generator()) ou for/await
Para que é usado o tipo primitivo Symbol?
O tipo primitivo Symbol é usado para criar valores únicos, como por exemplo chave de objetos ou nome de funções. Outro case é ser usado para criar valores privados em classes (não secretos, mas privados) que não devem ser acessados fora do contexto local da classe.
Quando é recomendado utilizar o Map?
Map é recomendado ser usado quando temos chaves dinâmicas (adicionando e removendo), quando precisamos limpar o objeto de forma simples (em um objeto comum, não é possível limpar os campos sem reassinar o objeto, ou passar undefinied pra cada propriedade).
Quais tipos de chaves o Map e o object aceitam?
O Map aceita qualquer valor como chave, diferentemente de Object que aceita apenas strings e Symbol (Number é convertido para String)
Quais as principais diferenças do weakmap referente ao map?
- Só permite object como valores de chaves (precisa conhecer a referencia pra acessar as chaves)
- As chaves não aceitam numeradores
- Não é iterável, não da pra rodar um for of nele
- Preve vazamento de memória, quando o garbage collector limpar as referências, elas também serão limpas do weakmap
Quais as particularidades do Set?
É uma estrutura de dados que não aceita valores repetidos, não tem chaves de acesso aos itens, implementa o padrão generator (é possível iterar diretamente sobre essa estrutura de dados utilizando for of por exemplo) é uma estrutura performática para fazer operações de comparação entre diferentes listas.
Para que é usado o padrão Reflect?
Garante a semântica e segurança ao lidar com os objetos.
Padrão utilizado para lidar com objetos de maneira segura, por exemplo para testar existência de propriedades, adicionar novas propriedades e principalmente deletar propriedades de objetos sem utilizar a palavra reservada delete para isso (a utilização dela é pouco performático)
Para que é usado o Proxy?
Usado para interceptar mudanças nos objetos, atua semelhante ao padrão Observer que observa uma entidade e notifica os interessados quando há uma mudança na entidade.
Importante é perceber que para o proxy funcionar é necessário utilizar o objeto proxy criado pela classe Proxy, ou seja, ao invés de modificar o objeto original.
Qual a principal diferença entre setTimeout x setInterval?
A principal diferença entre setTimeout e setInterval é que o setTimeout executa uma função assincrona depois do tempo especificado por parâmetro, já o setInterval executa uma função assíncrona continuamente passado o tempo especificado por parâmetro.
Vale a pena comentar que as função assíncronas registradas por essas funções devem ser removidas quando não estiverem mais sendo usadas, o garbage coletor do JS não limpa essas referências e elas só serão removidas no fim do ciclo de execução do JS.
Qual a diferença entre process.nextTick x setImmediate?
process.nextTick aceita a passagem de uma função que será executada como prioridade 0, interrompe a fila de processamento do JS e executa a task antes de qualquer outro processamento. É uma extrema má prática manipular a fila de processamento do JS utilizando essa função.
setImmediate dispara uma função assincrona pra ser executada imediatamente, respeita a fila de processamento do JS e é a solução correta pra ser usada no lugar de um setTimeout com valor 0 (pra executar imediatamente).