Tipos de Dados

Tipagem de Dados

A tipagem funciona como uma regra para o uso de dados, quanto mais forte for a tipagem, mais obrigatório é a declaração do tipo de dado. No javascript a tipagem é fraca e a declaração dos tipos de dados acontece de forma dinâmica.

Tipagem fraca

Permite realizar operações com tipos diferentes sem dar erro, pois resolve por ele mesmo.

Tipagem dinâmica

Não há necessidade de explicitar o tipo no momento da declaração ou atribuição.
A tipagem dinâmica trabalha com Inferência de Tipo, ou seja, o compilador, em tempo de execução, atribui automaticamente o tipo de dado de acordo com o tipo de valor atribuído ou reatribuído. Isso significa que uma variável pode ter vários tipos ao longo da sua utilização.

                            var x;
                            x = 'teste';
                            console.log(x);
                            x = 1;
                            console.log(x);
                            x = true;
                            console.log(x);
                            x = null;
                            console.log(x);
                            x = undefined;
                            console.log(x);
                            x = { name: 'Maria', lastName: 'Souza' };
                            console.log(x);
                            x = [1, 2, 3, 4, 5];
                            console.log(x);
                            x = () => console.log('I am function...');
                            console.log(x);
                            console.log(x());

                            console.log(typeof x);
                        

Estrutura de Tipos de Dados

Tipo de Dado Primitivo

Armazena na memória o valor em si.
Um primitivo é um dado que não é representado através de um Objeto e, por consequência, não possui métodos
Observações:
O JS permite usar funções nativas dos objetos nativos nos tipos primitivos. Para isso, basta escrever o tipo primitivo seguido de ponto final. Internamente o JS converte o tipo primitivo para o tipo nativo objeto, para que assim seja possível acessar os métodos disponíveis.

                            var texto = 'teste';
                            console.log(texto.toUpperCase()); // TESTE
                            console.log(texto.toLowerCase()); // teste
                            console.log(typeof texto);        // string

                            var numero = 10.35566;
                            console.log(numero.toFixed(2)); // 10.36 
                            console.log(typeof numero);     // number
                        
À exceção do null e undefined, todos os primitivos tem um objeto wrapper equivalente:
O método valueOf() do objeto wrapper retorna o valor primitivo.

Tipo de Dado por Referência

Armazena na memória o endereço (referência) do valor. Faz um apontamento para o valor que está em outro espaço de memória. Resumindo, referência (endereço) e valor estão em espaços de memória diferentes. OBS: Arrays e Functions também são objetos no javascript.
Observações
O tipo primitivo é mais simples, e portanto, mais rápido de ler.
É possível verificar o tipo da variável através do operador typeof

References

MDN - Primitive escape() A escape()função calcula uma nova string na qual certos caracteres foram substituídos por uma sequência de escape hexadecimal. Sequências de Escape & Símbolos A propriedade global NaN é um valor que representa Not-A-Number