Em JavaScript, existem dois valores que basicamente dizem 'Não existo' - undefinede null.
Uma propriedade à qual um programador não atribuiu nada será undefined, mas para que uma propriedade se torne null, nulldeve ser explicitamente atribuída a ela.
Uma vez pensei que havia uma necessidade de nullporque undefinedé um valor primitivo e nullum objeto. Não é, mesmo que typeof nullvá render 'object': Na verdade, ambos são valores primitivos - o que significa nem undefinede nem nullpodem ser retornados de uma função de construtor, já que ambos serão convertidos em um objeto vazio (é necessário lançar um erro para proclamar a falha nos construtores).
Ambos também avaliam falseem contextos booleanos. A única diferença real em que consigo pensar é que um avalia para NaN, o outro para 0em contextos numéricos.
Então, por que há ambos undefinede nullse isso apenas confunde os programadores que estão verificando incorretamente nullao tentar descobrir se uma propriedade foi definida ou não?
O que eu gostaria de saber é se alguém tem um exemplo razoável onde é necessário usar e nullque não pode ser expresso usando undefined.
Portanto, o consenso geral parece ser que undefinedsignifica 'não existe tal propriedade', enquanto nullsignifica 'a propriedade existe, mas não tem valor'.
Eu poderia conviver com isso se as implementações de JavaScript realmente aplicassem esse comportamento - mas undefinedé um valor primitivo perfeitamente válido, portanto, pode ser facilmente atribuído a propriedades existentes para quebrar esse contrato. Portanto, se você quiser ter certeza de que existe uma propriedade, você deve usar a inoperadora ou hasOwnProperty()mesmo assim. Então, mais uma vez: qual é o uso prático para valores separados para undefinede null?
Na verdade, eu uso undefinedquando desejo cancelar a definição de valores de propriedades que não estão mais em uso, mas que não desejo delete. Devo usar em nullvez disso?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.Não, apenas undefineddiz isso.
undefined.