Questão nº 56
Questão de Informática · FGV TJTO 2022 (nº 56)
Considere o código JavaScript a seguir.
var x1
var x2
var x3
var y = 11
var z = 12
x1= z++ == ++y
x2= 10 + "casa"
x3= y+1 === z && 10 != "20"
Após a execução dessas operações, os valores de x1, x2 e x3 são, respectivamente:
- A`false, 10casa, true`
- B`false, 10casa, false`
- C`false, undefined, false`
- D`true, 10casa, true` (alternativa correta)
- E`true, undefined, false`
Resposta comentada
Gabarito Alternativa D
Em JavaScript, é crucial entender como os operadores de incremento/decremento (++, --) funcionam (prefixo vs. postfixo) e como o JavaScript lida com a coerção de tipos (conversão automática de tipos) em operações como concatenação de strings e comparações.
-
Cálculo de
x1:var y = 11var z = 12x1 = z++ == ++y- Primeiro,
z++é avaliado: o valor atual dez(que é12) é usado na comparação, e depoiszé incrementado para13. - Em seguida,
++yé avaliado:yé primeiro incrementado para12, e depois seu novo valor (12) é usado na comparação. - A expressão se torna
12 == 12, que étrue. - Portanto,
x1recebe o valortrue. - Após esta linha,
yé12ezé13.
-
Cálculo de
x2:x2 = 10 + "casa"- Quando o operador
+é usado com uma string e um número, o número é convertido para string e ocorre uma concatenação de strings. "10" + "casa"resulta em"10casa".- Portanto,
x2recebe o valor"10casa".
-
Cálculo de
x3:x3 = y+1 === z && 10 != "20"- Lembre-se que
yagora é12ezé13. - Primeira parte:
y+1 === zy+1é12 + 1, que é13.13 === 13(comparação de igualdade estrita: verifica valor e tipo). Isso étrue.
- Segunda parte:
10 != "20"!=é o operador de desigualdade solta: ele tenta converter os tipos antes de comparar.- A string
"20"é convertida para o número20. 10 != 20étrue.
- Finalmente,
true && true(operador lógico AND) resulta emtrue. - Portanto,
x3recebe o valortrue.
Os valores finais são: x1 = true, x2 = "10casa", x3 = true.
(A) Incorreta: x1 é true, não false. A interpretação incorreta dos operadores de incremento (z++ e ++y) é a armadilha aqui.
(B) Incorreta: x1 é true, não false, e x3 é true, não false.
(C) Incorreta: x1 é true, não false, e x2 é "10casa", não undefined.
(D) Correta: x1 é true (devido à avaliação correta dos operadores de incremento), x2 é "10casa" (devido à concatenação de string), e x3 é true (devido à avaliação correta das comparações lógicas e dos valores atualizados de y e z).
(E) Incorreta: x2 é "10casa", não undefined.
Fonte: FGV TJTO 2022 Técnico Judiciário - Informática (Caderno Tipo 1). Reproduzida para fins de estudo.