logo

Banner do Post

Qual é a diferença entre "==" e "===" no JavaScript ?

Toda linguagem de programação possue vários tipos de comparadores de operações, porém no JavaScript existem dois que confundem bastante para quem está iniciando seus estudos nessa linguagem, nesse artigo o mistério entre esses dois operadores será desvendado e de bonus algumas dicas sobre como melhor utilizar os operadores de igualdade e igualdade estrita.

Introdução

JavaScript é uma linguagem de tipagem dinâmica. Isso significa que você não necessita declarar o tipo de uma variável antes de sua atribuição. O tipo será automaticamente determinado quando o programa for processado. Isso também significa que você pode reatribuir uma mesma variável com um tipo diferente.

Portanto, em alguns momentos durante o desenvolvimento de um software, será necessário, fazer uma comparação de igualdade entre valores e é ai que entra os operadores de igualdade e igualdade estrita.

Operador de igualdade: "=="

Esse operador gera um pouco de confusão quando um desenvolvedor percebe que a seguinte operação retorna True:

"1" == 1 // True

Mas o que acontece debaixo dos panos é bastante interessante. O operador de igualdade tenta realizar a conversão dos tipos se os tipos diferem e depois compara a igualdade, ou seja, um ou ambos dos valores são convertidos para um tipo comum. As regras de conversão são complexas e dependem dos tipos de argumentos. Para uma tabela de comparação completa, você pode acessar a documentação do MDN.

Nesse contexto, o que aconteceu no exemplo quando tentamos comparar a string "1" com um número, o primeiro argumento foi convertido para um tipo number.

"1" == 1 // Se torna
ToNumber("1") === 1

Embora a comparação de string e number seja compreensível, as regras complexas para outros tipos conduzem a resultados ilógicos. Por exemplo, ver as comparações entre nulo, indefinido e falso:

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

Operador de igualdade estrita: "==="

Esse operador é o mais recomendado ao fazer checagem de igualdades, pois ele apenas retorna True se os dois argumentos forem do mesmo tipo.

Qual eu devo utilizar para cada situação?

Se usarmos o operador “==” em uma condição, saberemos que ela só será verdadeira se o valor da esquerda for o mesmo valor da direita, por exemplo:

if (true == “true”) // true
if (10 == “10”) // true
if (true == true) // true
if (10 == 10) // true

Mas suponha que seja preciso fazer essa validação tendo certeza de que o número da direita é realmente um número, e não apenas possui o mesmo caractere. É nessa hora que utilizamos a igualdade estrita "===", comparando não apenas os valores mas também os seus tipos.

if (true === “true”) // false
if (10 === “10”) // false
if (true === true) // true
if (10 === 10) // true

E assim como os operadores “==” e “===”, usamos a mesma lógica para os seus inversos “!=” e “!==”. Veja a seguir:

if (true != “true”) // false
if (4 != “4”) // false
if (true !== “true”) // true
if (4 !== “4”) // true
if (true !== true) // false
if (4 !== 4) // false

Conclusão

Utilizar o operador de comparação de igualdade estrita em 99% das vezes será a melhor opção. Ao tentar comparar diferentes tipos com ele o resultado é sempre falso. Obterá os resultados que espera que não estejam sujeitos a regras de conversão difíceis de memorizar.

Note-se que estes operadores de comparação são para comparar tipos primitivos. Para comparar a igualdade profunda de objetos ou arrays é necessária uma abordagem diferente que compare os operandos estruturalmente. Qualquer dúvida, dicas ou sugestões, não se esqueça de deixar nos comentário aqui em baixo.

Espero que tenha curtido 🤟

Programação assíncrona, Event Loop e NodeJs

Post anterior

Construindo APIs com o Mirage JS

Próximo post