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.