Comparações

A comparação de valores em JavaScript merece um capítulo a parte. De forma geral, o processo é bastante parecido com o que já estamos acostumados: usamos == para comparar a igualdade entre duas variáveis, como evidenciado no exemplo a seguir.

let a = 10;
if(a == 10){
    console.log("igual");
}

Agora, para complicar um pouco, vamos fazer uma leve alteração nesse código:

let a = "10";
if(a == 10){
    console.log("igual");
}

Note que a variável a é uma string com conteúdo "10". Já a estrutura condicional if verifica se a variável a é igual ao número 10. Qual será a saída?

Igual! Isso acontece porque o JavaScript faz a conversão de tipos automaticamente. Ou seja: o JavaScript converte o número 10 para uma string e depois compara com a string "10". Portanto, a comparação é verdadeira e o resultado impresso será "igual".

Se você deseja evitar a coerção de tipo e garantir que tanto o valor quanto o tipo sejam iguais, use o operador === (igualdade estrita), que não realiza a conversão de tipo:

let a = "10";
if (a === 10) {
    console.log("igual");
}
else {
    console.log("diferente");
}

Comparando vetores

Observe a seguinte declaração de vetores a seguir:

let a = [1,2,3];
let b = [1,2,3];

Agora, considere as seguintes condicionais:

if(a==b){ console.log("a==b") }
if(a===b) { console.log("a===b") }

Na sua opinião, o que acontecerá? As duas mensagens serão impressas na tela, apenas uma (qual delas?) ou nenhuma?

Neste caso, nenhuma linha será impressa na tela. Isso ocorre porque, neste caso, a comparação feita é pelo endereço de memória. Embora a e b representem vetores com conteúdo idêntico, eles estão armazenados em posições diferentes de memória.

E no caso a seguir, o que acontecerá?

let c = a;
if(a==c){ console.log("a==c") }
if(a===c) { console.log("a===c") }

As duas linhas serão impressas na tela, já que o endereço referenciado pelas variáveis a e c é o mesmo.