De volta ao básico: nulo vs. indefinido

nulle undefinedsão dois valores especiais em Javascript usados ​​para representar não-valores. Existem dois desses não valores porque

  1. JavaScript foi projetado com o sistema de tipos do Java em mente e emprestado nullpara representar não um objeto.
  2. O JavaScript inicial lida com erros silenciosamente, levando a bugs inesperados. undefinedfoi adicionado para indicar tal valor. Isso é usado quando uma propriedade / valor deveria acontecer, mas não apareceu.

Portanto, com isso em mente, vamos ver onde podemos encontrar esses valores.

Valores e operadores

Como undefinedé usado para indicar propriedade e valor ausentes, todas as variáveis ​​/ propriedades não existentes e variáveis ​​/ propriedades não inicializadas teriam um valor de undefined. Um elemento excluído também tem um valor de undefinedcomo um espaço reservado para o elemento. (Observe que delete array[index]não remove o elemento, apenas configurando-o como undefined)

undefinedtambém é uma propriedade no objeto global ( globalno ambiente do Node e windowno ambiente do navegador).

voidoperador é usado para retornar undefinedqualquer valor fornecido como operando. Existem alguns motivos pelos quais você deseja usar em voidvez deundefined

  1. undefined valor pode ser ofuscado por outros valores.
  2. Antes do ES5, não havia propriedade somente leitura, portanto, o valor de undefinedpode ser substituído.

null, por outro lado, é usado onde nenhum objeto é esperado. Você pode encontrar nullcomo resultado deObject.getPrototypeOf(Object.prototype)

Tipos e valor

Ambos undefinede nullsão valores primitivos. undefinedé um tipo de si mesmo, enquanto nullindica vazio

Coerção

undefinedrepresenta valores que estão faltando, portanto, quando for coagido ou convertido para o tipo numérico, ele se tornará NaN, enquanto que nullnão representa nenhum valor e quando for coagido, se tornará 0.

Fonte: http://speakingjs.com/es5/ch08.html