Qual é a diferença entre uma variável que é: `null`, `undefined` ou não declarada?
Como você checaria cada um destes estados?"Variáveis não declaradas são criadas quando você atribui um valor a um identificador que não foi criado anteriormente usando var, let ou const. Variáveis não declaradas serão definidas globalmente, fora do escopo atual. No modo estrito, um ReferenceError
será lançado quando você tentar atribuir a uma variável não declarada. Variáveis não declaradas são ruins assim como as variáveis globais são ruins. Evite elas a todo custo! Para verificá-las, envolva o uso delas em um bloco try/catch
.
Uma variável que é undefined
é uma variável que foi declarada, mas não atribuída um valor. É do tipo 'undefined'. Se uma função não retornar nenhum valor como resultado de sua execução, e se for atribuída a uma variável, a variável também terá o valor de undefined
. Para verificar isso, compare usando o operador de igualdade estrita (===
) ou typeof
, que retornará a string undefined
. Note que você não deve usar o operador de igualdade abstrata para verificar, pois também retornará true
se o valor for null
.
Uma variável que é null
terá sido explicitamente atribuída ao valor null
. Ele não representa nenhum valor e é diferente de undefined
no sentido de que foi explicitamente atribuído. Para verificar se é null,
simplesmente compare usando o operador de igualdade estrita. Observe que, assim como acima, você não deve usar o operador de igualdade abstrata (==
) para verificar, pois também retornará true
se o valor for undefined
.
Como bom hábito, nunca deixe suas variáveis não declaradas ou não atribuídas. Atribua explicitamente null
a elas depois de declará-las, se você não pretende usá-las ainda. Se você usa alguma ferramenta de análise estática em seu fluxo de trabalho (por exemplo, ESLint, TypeScript Compiler), geralmente ela também pode verificar se você está referenciando variáveis não declaradas.