Advanced javascript datatypes Flashcards

Tipos avançados do javascript como Map, Set, Reflect

1
Q

O que são Generators/Iterators?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Para que é usado o tipo primitivo Symbol?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Quando é recomendado utilizar o Map?

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Quais tipos de chaves o Map e o object aceitam?

A

O Map aceita qualquer valor como chave, diferentemente de Object que aceita apenas strings e Symbol (Number é convertido para String)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Quais as principais diferenças do weakmap referente ao map?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Quais as particularidades do Set?

A

É 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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Para que é usado o padrão Reflect?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Para que é usado o Proxy?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Qual a principal diferença entre setTimeout x setInterval?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Qual a diferença entre process.nextTick x setImmediate?

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly