Tipos de dados
Nem todo valor é igual: um texto, um número e um verdadeiro/falso se comportam de formas diferentes. Conhecer os tipos evita muita confusão.
Estudar esta lição interativa →Até agora guardamos valores em variáveis sem prestar muita atenção no tipo desses valores. Mas o JavaScript presta, e muito. Todo valor que existe em um programa pertence a um tipo, que é a categoria daquele dado: um texto é de um tipo, um número é de outro, um verdadeiro/falso é de outro ainda. Isso não é um detalhe técnico sem importância; é o que define o que você pode fazer com cada valor.
Faz todo sentido somar dois números (2 + 3 dá 5), mas não faz sentido somar dois nomes. O que seria "Ana + Bia"? O JavaScript resolve essa questão olhando o tipo: com números, o sinal de + soma; com textos, o mesmo sinal junta um pedaço no outro. É o mesmo símbolo se comportando de formas diferentes, e quem decide é o tipo dos valores.
O mesmo sinal de + faz coisas diferentes conforme o tipo: soma números, mas junta textos. Quem manda é o tipo dos valores.
É por isso que conhecer os tipos desde cedo evita uma montanha de confusões. E a boa notícia é que eles são poucos: dá para conhecer todos agora mesmo.
String
"Ana"Texto. Vai sempre entre aspas, que avisam ao JavaScript que aquilo é texto, e não um comando.
Number
42Números, com ou sem decimais. O separador decimal é o ponto, nunca a vírgula.
Boolean
trueSó dois valores: verdadeiro ou falso. É a base de toda decisão.
null
Um vazio colocado de propósito: aqui não há nada, e isso é intencional.
undefined
Uma variável que você criou, mas ainda não guardou nada dentro dela.
E se você tiver um valor na mão e não souber de que tipo ele é? Existe uma ferramenta exatamente para isso: o operador typeof. Você escreve typeof na frente de qualquer valor ou variável, e ele te devolve o nome do tipo em forma de texto. Parece simples, e é, mas essa é uma das ferramentas que você mais vai usar quando algo der errado e você precisar investigar "espera, que tipo de valor está guardado aqui, afinal?". Rode o exemplo e veja o typeof respondendo para cada tipo:
// Os tipos de dados mais usados no dia a dia:
let texto = "Isso é uma string (texto)"; // String
let numero = 42; // Number
let decimal = 3.99; // Number também
let ligado = true; // Boolean (true/false)
let nada = null; // "vazio de propósito"
let indefinido; // undefined (sem valor ainda)
console.log(typeof texto);
console.log(typeof numero);
console.log(typeof ligado);
console.log(typeof indefinido);Aqui está uma das confusões que mais pegam quem está começando, então vale ver com atenção. O número 5 e o texto "5" (com aspas) não são a mesma coisa para o JavaScript, mesmo parecendo idênticos aos nossos olhos. Um é do tipo Number, o outro é do tipo String. E, como acabamos de ver, o + se comporta diferente para cada um: com números ele soma, com textos ele junta. É por isso que 5 + 5 resulta em 10, mas "5" + "5" resulta em "55". Rode e comprove com os próprios olhos:
// Cuidado: número e texto são coisas diferentes!
console.log(5 + 5); // 10 (soma de números)
console.log("5" + "5"); // "55" (junção de textos!)
console.log(typeof 5); // number
console.log(typeof "5"); // stringA diferença entre null e undefined confunde bastante no começo, então vai uma analogia. Imagine que você está esperando uma caixa de presente pelo correio. O undefined é quando a caixa nunca chegou: não existe caixa nenhuma, o espaço está vazio porque ninguém colocou nada ali ainda. Já o null é quando a caixa chega, mas vem vazia de propósito: alguém decidiu conscientemente que ali não haveria nada. Na prática, o undefined costuma ser o JavaScript dizendo "você não definiu isto", enquanto o null costuma ser você dizendo "isto está vazio, de propósito".
Rode typeof null e a resposta vem como "object", não "null". É um erro histórico, dos primeiros dias da linguagem, que nunca foi corrigido para não quebrar sites antigos. Ele não significa que null seja um objeto. Por isso, para saber se um valor é null, não use o typeof: compare diretamente com === null.
console.log(typeof null); // "object" (erro histórico da linguagem)
console.log(typeof undefined); // "undefined"
const vazio = null;
console.log(vazio === null); // true: este é o teste certo para nullRode e veja o typeof null devolver "object", enquanto === null responde certo.
// Sua vez! Crie um valor de cada tipo e veja o typeof.
let texto = "escreva algo";
let numero = 0; // troque por um número
let ligado = true; // true ou false
console.log(typeof texto);
console.log(typeof numero);
console.log(typeof ligado);Ajuste os valores e clique em Rodar.