As variáveis JavaScript podem conter diferentes tipos de dados : números, strings, booleanos, objetos e outros.
var length = 16; // Number
var ultimoNome = "Johnson"; // String
var x = {primeiroNome:"João", ultimoNome:"José"}; // Object
O Conceito de Tipos de Dados
Na programação, os tipos de dados são um conceito importante.
Para poder operar com variáveis, é importante o domínio do tipo.
Sem os tipos de dados, um interpretador não terá estratégias resolver situações como a a soma de um número e uma string.
var x = 16 + "Volvo"; // x === "16Volvo"
Faz algum sentido adicionar "Volvo" a dezesseis? Irá produzir um erro ou produzirá um resultado?
No JavaScript o interpretador converterá o valor numérico 16 para o valor string "16" e proceder uma operação de adição de strings.
var x = "16" + "Volvo"; // x === "16Volvo"
Ao adicionar um número e uma sequência, o JavaScript tratará o número como uma sequência.
var x = 16 + "Volvo";
var x = "Volvo" + 16;
JavaScript avalia expressões da esquerda para a direita. Sequências diferentes podem produzir resultados diferentes.
var x = 16 + 4 + "Volvo"; // x == 20Volvo
No exemplo acima 16 é somado a 4 e o resultado, igual a 20, é concatenado a "Volvo".
var x = "Volvo" + 16 + 4; // x == Volvo164
No segundo exemplo, "Volvo" é concatenado a 16 e o resultado ("Volvo16") é concatenado a 4.
Os Tipos de JavaScript São Dinâmicos
JavaScript tem tipos dinâmicos. Isso significa que a mesma variável pode ser usada para armazenar diferentes tipos de dados:
var x; // x === undefined
x = 5; // typeof x === "number"
x = "João"; // typeof x === "string"
Strings
Uma string é uma cadeia de caracteres como "João José".
As strings são escritas com aspas. Você pode usar aspas simples ou duplas:
Você pode usar aspas dentro de uma string, desde que não correspondam às aspas ao redor da string:
var answer1 = "Tudo bem."; // Aspas duplas
var answer2 = "Ele se chama João"; // Aspas duplas
var answer3 = ‘O dia está bonito.’; // Aspas simples
Você aprenderá mais sobre textos posteriormente neste tutorial.
Números
JavaScript possui apenas um tipo numérico.
Os números podem ser escritos com ou sem decimais:
var x1 = 34.00; // Written with decimals
var x2 = 34; // Written without decimals
Números extra grandes ou extra pequenos podem ser escritos com notação científica (exponencial):
var y = 123e5; // 12300000
var z = 123e-5; // 0.00123
Você aprenderá mais sobre números posteriormente neste tutorial.
Booleanos
Booleanos podem ter apenas dois valores: true (verdadeiro) ou false (falso).
var x = 5;
var y = 5;
var z = 6;
(x == y) // Retorna verdadeiro (true)
(x == z) // Retorna falso (false)
Booleanos são frequentemente usados em testes condicionais.
Você aprenderá mais sobre o teste condicional posteriormente neste tutorial.
Matrizes
As matrizes JavaScript são escritas com colchetes.
Os itens da matriz são separados por vírgulas.
O código a seguir declara (cria) uma matriz chamada carros, contendo três itens (nomes de carros):
var carros = ["Saab", "Volvo", "BMW"];
Os índices de matriz são iniciados em zero, o que significa que o primeiro item é [0], o segundo é [1] e assim por diante.
Você aprenderá mais sobre matrizes posteriormente neste tutorial.
Objetos
Objetos são escritos com chaves {}.
As propriedades do objeto são gravadas como pares nome: valor, separados por vírgulas.
var pessoa = {primeiroNome:"João", ultimoNome:"José", idade:50, corOlhos:"blue"};
O objeto (pessoa) no exemplo acima possui 4 propriedades: primeiroNome, ultimoNome, idade e corOlhos.
Você aprenderá mais sobre objetos posteriormente neste tutorial.
O Tipo de Operador
O operador typeof retorna o tipo de uma variável ou expressão do Javascript:
typeof "" // Retorna "string".
typeof "João" // Retorna "string".
typeof "João José" // Retorna "string".
typeof 0 // Retorna "number".
typeof 314 // Retorna "number".
typeof 3.14 // Retorna "number".
typeof (3) // Retorna "number".
typeof (3 + 4) // Retorna "number".
Valor Indefinido (Undefined)
Em JavaScript, uma variável sem um valor, tem o valor indefinido (undefined). O tipo também é indefinido.
var carro; // Valor é undefined, tipo é undefined
Qualquer variável pode ser esvaziada, definindo-se seu valor como undefined. O tipo também ficará indefinido.
carro = undefined; // Valor é undefined, tipo é undefined
Valores Vazios
Um valor vazio não é um valor indefinido.
Uma cadeia vazia tem valor e tipo string.
var carro = ""; // Valor é "", o tipo é string.
Nulo
Em JavaScript null é "nulo", "nada". É um valor com o tipo de dados de objeto, e que indica que uma expressão ou variável não se referem a nada na memória.
Você pode liberar um objeto atribuindo null a uma variável.
var pessoa = {primeiroNome:"João", ultimoNome:"José", age:50, eyeColor:"blue"};
pessoa = null; // Agora o valor é null, mas o tipo é um objeto
Liberação de Objetos da Memória
O JavaScript utiliza o sistema de Garbage Collection para o gerenciamento da memória de dados alocados pelo programa.
Os dados do JavaScript são alocados quando "coisas" (objetos, strings, números, booleanos, datas, etc.) são criadas e "automaticamente" liberadas quando não são mais usadas.
Um objeto pode ser liberado com a atribuição do valor undefined para variável do objeto.
var pessoa = {primeiroNome:"João", ultimoNome:"José", idade:50, corOlhos:"blue"};
pessoa = undefined; // Agora ambos valores e tipo são undefined
Diferença entre Indefinido e Nulo
Os objetos undefined e null são iguais em valor, mas diferentes em tipo.
O valor null tem tipo objeto, undefined é um tipo, portanto são tipos diferentes, embora correspondam em mesmo valor, correspondam a zero, nada, vazio.
var x = typeof undefined // x === undefined
var y = typeof null // y === "object"
Com o operador == apenas a igualdade de valores dos operadores será avaliada.
Com o operador de comparação === tanto igualdade de valores como igualdade de tipos dos operadores serão avaliadas.
var z = null == undefined // z === true
var t = null === undefined // t === false
Dados Primitivos
Um valor de dados primitivo é um valor de dados simples e único, sem propriedades e métodos adicionais.
O operador typeof pode retornar tipos primitivos de literais e variáveis.
- string
- number
- boolean
- undefined
Exemplos:
typeof "João" // Retorna "string"
typeof 3.14 // Retorna "number"
typeof true // Retorna "boolean"
typeof false // Retorna "boolean"
typeof x // Retorna undefined (se x não tiver um valor)
Dados Complexos
O operador typeof pode retornar dois tipos complexos, não-literais:
- function
- object
O operador typeof retorna "object" para objetos, matrizes e valores nulos.
O operador typeof retorna "function" para funções.
typeof {nome:'João', age:34} // Retorna "object"
typeof [1,2,3,4] // Retorna "object" (não "array", veja a nota abaixo)
typeof null // Retorna "object"
typeof function myFunc(){} // Retorna "function"
O operador typeof retorna "object" para matrizes porque, em JavaScript, matrizes são objetos com propriedades e métodos próprios.
Teste-se com Exercícios
Exercício: Use comentários para descrever o tipo de dados correto das variáveis a seguir.
comprimento var = 16; //
var ultimoNome = "Johnson"; //
var x = {
primeiroNome: "João",
ultimoNome: "José"
}; //