Tipos de dados - null e undefined
Nem sempre variáveis possuem valores e os tipos de dados null e undefined indicam justamente a ausência de valor de uma variável.
undefined
Quando criamos uma variável e não lhe atribuímos valor, ela automaticamente recebe o valor undefined e este é também o seu tipo de dados.
var undf;
console.log(undf);
Também há outros casos em que podemos encontrar valores undefined. Quando tentamos acessar o índice inexistente de um string, a valor retornado é undefined.
var nome = "Pedro";
console.log(nome[0]); // O console mostrará "P"
console.log(nome[4]); // O console mostrará "o"
console.log(nome[10]); // O console mostrará undefined
Quando falarmos sobre arrays e objetos vamos ver que:
null
null na verdade não é um tipo de dados, mas isso é considerado por muitos como uma falha do Javascript. Quando temos uma variável com algum valor e queremos "apagar" este valor, podemos atribuir-lhe o valor de null.
var temperatura = 35;
console.log(temperatura);
temperatura = null;
console.log(temperatura); // O console mostrará null
No exemplo acima, se tivéssemos uma estrutura condicional, poderíamos testar se há algum valor definido para a variável temperatura e escolher entre dois caminhos:
null x undefined
O exemplo mostrado acima pode também ser feito com undefined. Na verdade a linguagem javascript considera os valores null e undefined como iguais. Podemos testar com o código abaixo:
var undf = undefined;
var nl = null;
console.log(undf == nl); // O console mostrará true
Estes valor porém não são do mesmo tipo, portanto se fizermos uma comparação de igualdade de valor e tipo (===), obteremos um false.
var undf = undefined;
var nl = null;
console.log(nl === undf); // O console mostrará false
console.log(typeof undf); // O console mostrará undefined
console.log(typeof nl); // O console mostrará object
O valor null portanto é do tipo objeto em javascript, o que muito acreditam ser uma falha, como dito acima. Para estas pessoas, null deveria ser um tipo de dados assim como o undefined.
Se deveria ser assim ou não, não se pode afirmar. O importante é saber como as coisas funcionam na linguagem Javascript para podermos saber trabalhar com ela.