Null vs undefined em javascript
Null vs undefined em javascript
Introdução
Tanto null
quanto undefined
expressam o conceito de nada. Mas eles significam nada de maneiras diferentes.
undefined
é nada porque ninguém disse a ele o que deveria ser. null
é nada porque alguém disse que ele deveria ser nada. Podemos dizer que undefined é implicitamente nada e null é explicitamente nada.
Mas você também pode explicitamente definir algo como undefined
. Então, por que precisamos de ambos?
Meu nome é Lucas Paganini, e neste website, postamos tutoriais de desenvolvimento web a cada duas semanas. Se você está interessado nisso, por favor deixe um like e
Por que precisamos de ambos
Então, por que precisamos de ambos?
Ok, vamos imaginar que sua alimentação não seja a ideal. E a sua nutricionista, Paula, diz que você deve comer mais frutas. Pelo menos 3 frutas por dia, diz ela. Ela então diz que está tudo bem comer menos de 3 frutas alguns dias, mas a média semanal não deve ser inferior a 3.
Então, você está anotando seu consumo de frutas por dia.
Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ------------------ |
| 4 | 2 | 1 | 3 | 5 | | | Média = 15 / 5 = 3 |
markdown Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ------------------ |
| 4 | 2 | 1 | 3 | 5 | | | Média = 15 / 5 = 3 |
Os dias no futuro são undefined
, porque eles não aconteceram ainda, não sabemos o que colocar neles.
Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ------------------ |
| 4 | 2 | 3 | 1 | 5 | | | Média = 15 / 5 = 3 |
👆 👆
undefined
markdown Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ------------------ |
| 4 | 2 | 3 | 1 | 5 | | | Média = 15 / 5 = 3 |
👆 👆
undefined
Acontece que você se esqueceu de anotar os últimos 2 dias.
Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ----------------- |
| 4 | 2 | 3 | ? | ? | | | Média = ? / 5 = ? |
👆 👆
undefined
markdown Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ----------------- |
| 4 | 2 | 3 | ? | ? | | | Média = ? / 5 = ? |
👆 👆
undefined
Você não pode colocar 0
porque isso atrapalharia a média semanal.
Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ------------------- |
| 4 | 2 | 3 | 0 | 0 | | | Média = 9 / 5 = 1.8 |
👆 👆
undefined
markdown Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ------------------- |
| 4 | 2 | 3 | 0 | 0 | | | Média = 9 / 5 = 1.8 |
👆 👆
undefined
E você também não pode deixar em branco (undefined
) Isso seria undefined e ela vai achar que você esqueceu de preencher a informação.
Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ----------------- |
| 4 | 2 | 3 | | | | | Média = 9 / 3 = 3 |
❌ ❌ 👆 👆
error undefined
markdown Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ----------------- |
| 4 | 2 | 3 | | | | | Média = 9 / 3 = 3 |
❌ ❌ 👆 👆
error undefined
Então você coloca um risco naquele dia, deixando claro que ele deve ser ignorado.
Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ----------------- |
| 4 | 2 | 3 | - | - | | | Média = 9 / 3 = 3 |
👆 👆 👆 👆
null null undefined
markdown Hoje
👇
| Seg | Ter | Qua | Qui | Sex | Sab | Dom |
| --- | --- | --- | --- | --- | --- | --- | ----------------- |
| 4 | 2 | 3 | - | - | | | Média = 9 / 3 = 3 |
👆 👆 👆 👆
null null undefined
Isso é null
e undefined
coexistindo.
Um seria um erro, porque você esqueceu de preencher. O outro seria válido, porque você indicou explicitamente que ele deveria ser ignorado.
❌
| Qui |
| --- |
| |
👆
undefined
markdown ❌
| Qui |
| --- |
| |
👆
undefined
✅
| Qui |
| --- |
| - |
👆
null
markdown ✅
| Qui |
| --- |
| - |
👆
null
typeof()
Outra diferença é que undefined
é um valor primitivo e um tipo primitivo. Se você executar typeof undefined
, obterá "undefined"
. Mas null
, por outro lado, é apenas um valor primitivo, se você executar typeof null
, obterá "object"
.
typeof undefined;
//=> "undefined"
typeof null;
//=> "object"
JavaScripttypeof undefined;
//=> "undefined"
typeof null;
//=> "object"
Comparações
Ambos são falsy, então, se você usar igualdade abstrata, eles são considerados iguais.
// Abstract equality
null == undefined;
//=> true
// Strict equality
null === undefined;
//=> false
JavaScript// Abstract equality
null == undefined;
//=> true
// Strict equality
null === undefined;
//=> false
Nullish
E eles também são nullish, então podemos usar operadores nullish neles. Talvez eu explore este tópico mais profundamente em um artigo futuro.
undefined ?? null ?? '' ?? null;
//=> ""
let x = null;
x ??= 'test 1';
x ??= 'test 2';
//=> "test 1"
JavaScriptundefined ?? null ?? '' ?? null;
//=> ""
let x = null;
x ??= 'test 1';
x ??= 'test 2';
//=> "test 1"
Conclusão
Referências para tudo o que eu disse estão nas referências.
Me tweet se você tiver alguma dúvida, curta se foi útil e
Você também pode nos contratar. Somos uma equipe de designers e desenvolvedores, e podemos trabalhar remotamente para o seu projeto. Acesse lucaspaganini.com se estiver interessado nisso. Tenha um ótimo dia e nos vemos em breve.