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é"
}; //