Considere o código JavaScript exibido logo abaixo. var x1 = 16; var x2 = "16"; var x3 = [1,2,3]; Usando as definições acima, analise as expressões a seguir. x3[0] == 1 x1 == x2 x1 === x2 true == x1 true == x3[0] Respectivamente, os valores retornados pelas expressões acima são:
- A)false, false, false, true, true;
Errada, porque erra as comparações com == e com true, que no JavaScript fazem conversão de tipos antes do resultado.
- B)false, true, false, false, false;
Errada, porque x1 == x2 não é false e true == x3[0] não é false, já que o == converte tipos.
- C)false, true, true, true, false;
Errada, porque x1 === x2 é false, já que number e string não são iguais no ===.
- D)true, true, false, false, true;
Certa, porque os resultados são true, true, false, false, true ao aplicar a regra do == e do ===.
- E)true, true, true, false, true.
Errada, porque x1 === x2 não pode ser true, pois os tipos são diferentes.
Gabarito: D
Em JavaScript, a comparação pode ser feita de dois jeitos: com == e com ===. O operador == faz conversão automática de tipos antes de comparar, então ele pode transformar texto em número, booleano em número e por aí vai. Já o === é o mais exigente: compara valor e tipo ao mesmo tempo, sem “ajudinhas”. No enunciado, x1 vale 16, x2 vale "16" e x3 é um vetor com o primeiro elemento igual a 1. Então x3[0] == 1 resulta em true, porque o elemento realmente é 1. Depois, x1 == x2 também dá true, pois o JavaScript converte a string "16" para número na comparação frouxa. Já x1 === x2 dá false, porque 16 é number e "16" é string, e no === o tipo importa. Em true == x1, o booleano true vira 1, então a comparação fica 1 == 16, que é false. Por fim, true == x3[0] vira 1 == 1, logo dá true. Assim, a sequência correta é true, true, false, false, true, exatamente o que aparece na alternativa D. Em prova, o truque clássico é esse: o == “conserta” tipos, o === não perdoa nem com café.