O JavaScript tem várias maneiras de indicar a ausência de um valor. Esta página
descreve as duas maneiras mais comuns: os tipos de dados null
e undefined
.
null
A palavra-chave null
representa uma ausência de valor definida intencionalmente. null
é um primitivo, embora o operador typeof
retorne que null
é um objeto.
Esse é um erro que foi transmitido da primeira versão do JavaScript e foi deixado intencionalmente sem ser endereçado para evitar a interrupção do comportamento esperado na Web.
typeof null
> object
Você pode definir uma variável como null
com a expectativa de que ela reflita um valor atribuído a ela em algum momento em um script ou um valor explicitamente ausente. Você também pode atribuir o valor null
a uma referência existente para limpar um valor anterior.
undefined
undefined
é um valor primitivo atribuído a variáveis
que acabaram de ser declaradas ou ao valor resultante de uma operação que
não retorna um valor significativo. Por exemplo, isso pode acontecer quando você declara
uma função no console para desenvolvedores de um navegador:
function myFunction() {}
> undefined
Uma função retorna undefined
explicitamente quando a instrução return
não retorna nenhum valor.
(function() {
return;
}());
> undefined
Comparação entre null
e undefined
Embora undefined
e null
tenham alguma sobreposição funcional, eles têm
finalidades diferentes. No sentido mais estrito, null
representa um valor
definido intencionalmente como "em branco", e undefined
representa a falta de um valor atribuído.
null
e undefined
são parcialmente iguais, mas não estritamente iguais.
O operador de igualdade flexível força operandos de diferentes tipos a valores
booleanos, fazendo com que null
e undefined
sejam false
. O operador de igualdade rígida
considera operandos de diferentes tipos de dados como desiguais.
null == undefined
> true
null === undefined
> false
Ao contrário da palavra-chave reservada null
, undefined
é uma propriedade do
objeto global. Essa foi uma decisão
de design tomada no início do desenvolvimento do JavaScript e permitiu que navegadores legados
substituissem completamente undefined
. Em navegadores mais recentes, ainda é possível usar
undefined
como um identificador em escopos não globais, substituindo o valor dela no
escopo da declaração. Nunca use undefined
como identificador. Ele
pode causar comportamentos inesperados e provavelmente confundir os futuros mantenedores da
base do código.
Teste seu conhecimento
O que typeof null
retorna?
object
undefined
primitive
string