nulo e indefinido

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