Null vs undefined em javascript

Null vs undefined em javascript

LinkIntroduçã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 inscreva-se na newsletter.

LinkPor 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.

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.

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.

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.

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.

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.

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.

markdown
    ❌

| Qui |
| --- |
|     |

    👆

undefined
markdown
    ✅

| Qui |
| --- |
| -   |

    👆

null

Linktypeof()

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".

JavaScript
typeof undefined;
//=> "undefined"

typeof null;
//=> "object"

LinkComparações

Ambos são falsy, então, se você usar igualdade abstrata, eles são considerados iguais.

JavaScript
// Abstract equality
null == undefined;
//=> true

// Strict equality
null === undefined;
//=> false

LinkNullish

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.

JavaScript
undefined ?? null ?? '' ?? null;
//=> ""

let x = null;
x ??= 'test 1';
x ??= 'test 2';
//=> "test 1"

LinkConclusã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 inscreva-se se quiser mais.

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.

LinkReferências

  1. Valores Falsy
  2. Valores Nullish
  3. Diferenças entre null e undefined
  4. Primitivos do JavaScript

Assine a nossa Newsletter e seja avisado quando eu lançar um curso, postar um vídeo ou escrever um artigo.

Campo obrigatório
Campo obrigatório