DEV Community

Cover image for Entendendo a diferença entre null e undefined em Javascript
José Lázaro
José Lázaro

Posted on

Entendendo a diferença entre null e undefined em Javascript

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

Enter fullscreen mode Exit fullscreen mode

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 

Enter fullscreen mode Exit fullscreen mode

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

var test = {};
console.log(test.nome); // undefined
Enter fullscreen mode Exit fullscreen mode

É 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} 

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Além disso, null é também um objeto. Leia mais sobre null aqui

console.log(typeof null) //object
Enter fullscreen mode Exit fullscreen mode

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

 null == undefined// true
 null === undefined // false
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

É 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/

Discussion (0)