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
- string: Representa quaisquer caracteres entre aspas ou crase, geralmente usada para textos. Não confundir com o tipo String que é um objeto do JavaScript, ou seja, um tipo de dado de referência.
var string = "Hello World";
console.log(string); // Hello World
console.log(typeof string); // string
var string = new String("Hello World");
console.log(string); // [String: 'Hello World']
console.log(typeof string); // object
É um tipo de dado iterable.
var texto = 'teste';
console.log(texto[0]); // t
console.log(texto[1]); // e
console.log(texto[2]); // s
console.log(texto[3]); // t
console.log(texto[4]); // e
O uso mais antigo são as aspas. Mas, atualmente usa-se também a crase, porque foi criado uma nova possibilidade, que é a interpolação, conhecida como Template string, que basicamente é a mistura de string com variáveis. As variáveis devem ser escritas entre ${}.
var name = 'Maria';
console.log(`My name is ${name}`);
Usa o padrão internacional para separar as casas decimais, usa ponto (.) ao invés de virgula (,).
Tem propriedades estáticas que expõem vários membros dos objetos nativos, possuem métodos estáticos que expõem o registro de símbolos globais e se parecem com uma classe de objeto nativo, mas estão incompletos como construtor.
Symbol()
Symbol(string)
Symbol() aceita um parâmetro OPCIONAL que é um identificador único.É uma descrição que pode ser usada para debugar, mas não para acessar o próprio symbol.
// Declaração de symbols
const id = Symbol(); // Symbol()
const id1 = Symbol('id'); // Symbol('id')
const id2 = Symbol('id'); // Symbol('id')
// Comparação de symbols
id1 === id2; // FALSE (Symbols são únicos)
Symbol e Iterators
Em uma condição boolen retorna false.
var teste = null;
console.log(teste); // null
if(teste){
console.log("true");
}else{
console.log("false");
}
console.log(typeof teste); // object
Em uma condição boolen retorna false.
var teste;
console.log(teste); // undefined
if(teste){
console.log("true");
}else{
console.log("false");
}
console.log(typeof teste); // undefined
Em uma condição boolen retorna false.
var teste = ''
console.log(teste); // ''
if(teste){
console.log("true");
}else{
console.log("false");
}
console.log(typeof teste); // string
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:- String para string
- Number para number
- Boolean para boolean
- Symbol para symbol
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.- Object: Lista nomeada. É um Literable Object
- Array: Lista numerada. É um Iterable Object
- Function: Também é um objeto. Permite ser chamada (Called).
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