Entendendo a diferença entre null e undefined em Javascript
Tags: javascript, webdev, beginners, programming
Published: 2022-05-21 17:02:03

Em Javascript, além dos tipos que normalmente nos deparamos (string, number, boolean, etc) possuimos o null e undefined. Suas definições podem ser um pouco confusas, principalmente porque entre linguagens podem possuir certas diferenças. 

Vamos entender inicialmente como se caracteriza cada um dos tipos:

## Undefined

Em resumo, undefined é um variável que foi declarado mas não recebeu nenhum valor ainda.

```
var someVar;

console.log(someVar) //undefined

```

Por padrão, quando uma variável é criada ele recebe o valor undefined, no caso acima, a variável ``someVar`` foi declarada mas não recebeu nenhum valor, logo, passou a ser undefined, pois seu valor não foi definido.

> Semânticamente undefined indica a ausência de um valor

Podemos utilizar o ``typeof`` em uma variável para descobrirmos o seu tipo.

```
var x;

console.log(typeof x === "undefined"); // true
console.log(typeof x == "undefined"); //true
console.log(typeof x === "object"); //false 

```

Dentro de um objeto, uma propriedade não definida também recebe o valor de undefined:

```
var test = {};
console.log(test.nome); // undefined
```
É importante lembrar que quando transformamos um objeto em JSON. os valores undefined não são reconhecidos, isso porque o JSON não reconhece o valor undefined como válido.

```
var q = {name: undefined, number: 1};
JSON.stringify(q); // {"number": 1} 

```


## Null

Diferente do undefined, o null é um valor vazio ou inexistente. Nulo é atribuído e explicitamente não significa nada. Quando definimos um valor de uma variável como null, dizemos que a variável está vazia.

```
var a = null;
console.log(a); // null
```

Além disso, null é também um objeto. Leia mais sobre null [aqui](https://dmitripavlutin.com/javascript-null/)

```
console.log(typeof null) //object
```

Podemos comparar também null com undefined como fazemos a seguir:

```
 null == undefined// true
 null === undefined // false
```

isso significa que null é undefined mas não é idêntico pelos motivos supracitados.

## Diferenças entre null e undefined

Para frisarmos melhor a diferença entre ambos, vamos revisar os conceitos:

> Undefined é uma variável declarada que não recebeu nenhum valor ainda, ou seja, ausência de valor em uma variável existente. Seu tipo é undefined.

```
var a;

console.log(a) // undefined;
console.log(typeof a) // undefined;
```

Uma variável com valor undefined nunca foi definida ou ela foi atribuída a undefined para ser "limpa".

> Null é um valor inexistente ou vazio, null é um valor atribuído. Seu tipo é object.

```
var b = null;

console.log(a) // null;
console.log(typeof a) // object;
```

Null é um valor nulo atribuído a um objeto. Em resumo é um objeto que não foi inicializado ainda ou não foi criado. É usado para passar valores padrão de objetos não inicializados. 

Os comparadores são ótimas maneiras de verificarmos os tipos de determinados elementos dentro de uma linguagem.

comparações de tipos:

```
console.log(false == undefined); //false
console.log(false == null); //false
console.log(null == undefined); //true
console.log(null === null); //true
console.log(undefined === undefined); //true
console.log(undefined === null); //false
console.log(undefined == null); //true
```

É importante o conhecimento acerca dos tipos especiais, principalmente quando estamos lidando com tipagem em Javascript. Esteja sempre atento aos elementos passados no seu código para evitar qualquer bug. Abaixo você encontra algumas referências acerca do tema discutido neste artigo.


## Referências

https://pt.stackoverflow.com/questions/2407/qual-a-diferen%C3%A7a-entre-null-e-undefined#:~:text=Semanticamente%2C%20undefined%20significa%20%22sem%20refer%C3%AAncia,null%20significa%20%22sem%20valor%22.

https://flexiple.com/undefined-vs-null-javascript/

https://codeburst.io/javascript-whats-the-difference-between-null-undefined-37793b5bfce6

https://stackoverflow.com/questions/5076944/what-is-the-difference-between-null-and-undefined-in-javascript

https://www.geeksforgeeks.org/undefined-vs-null-in-javascript/