Considere o código JavaScript a seguir. var x1 var x2 var...

Próximas questões
Com base no mesmo assunto
Q1933758 Programação
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:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a D. Vamos entender o porquê, analisando cada uma das expressões dadas no código JavaScript:

  • x1 = z++ == ++y: Esta linha está comparando o valor de 'z' com 'y', após incrementar ambos. O operador z++ é um pós-incremento, que retorna o valor de 'z' antes de incrementá-lo, e o operador ++y é um pré-incremento, que incrementa 'y' antes de retornar o seu valor. Portanto, 'z' é incrementado de 12 para 13 após sua avaliação na comparação, e 'y' é incrementado de 11 para 12 antes de sua avaliação. A comparação é entre 12 (valor original de 'z') e 12 (valor incrementado de 'y'), resultando em true.

  • x2 = 10 + "casa": Quando você soma um número a uma string em JavaScript, o resultado é uma concatenação dos dois valores em forma de string. Portanto, o valor de 'x2' torna-se a string "10casa".

  • x3 = y+1 === z && 10 != "10": O primeiro operador de comparação === verifica se ambos os valores e tipos são iguais. Após o incremento anterior, 'y' é 12, então 'y+1' é 13, que é igual ao novo valor de 'z' pós-incremento. A segunda comparação utiliza o operador !=, que verifica a desigualdade de valor, ignorando o tipo. Em JavaScript, o número 10 é, de fato, diferente da string "10" em valor e tipo, mas aqui estamos usando o operador que ignora o tipo, então 10 é considerado igual a "10". No entanto, a expressão 10 != "10" é false, pois o operador != faz uma conversão de tipo antes da comparação, resultando em que 10 é igual a "10" após a conversão. Portanto, x3 é false porque a segunda parte da operação && é false.

Portanto, após a execução do código fornecido, os valores de x1, x2 e x3 são, respectivamente, true, "10casa" e false, tornando a alternativa D a correta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Acho que a principal dificuldade nessa questão é em relação aos operadores z++ e ++y. Existe uma diferença entre os dois tipos de atribuição

Seja uma variável N

se colocarmos n++

O javascript irá incrementar em 1 a variável n e, em seguida, retornará o incremento

se colocarmos ++n

O javascript irá incrementar e retornar no mesmo momento a variável n + 1

No caso da questão:

y = 11

z = 12

x1= z++ == ++y // irá checar se z é igual a y

de acordo com o explicitado acima, o retorno será true, pois z++ continuará valendo 12, uma vez que não retorna de imediato e ++y valerá 12 a partir do momento em que foi declarado

Concordo com o Celso, mas acho importante também que no java script e em outras linguagens de tipagem dinâmica = significa atribuição de valor, == comparação de valores (no javascript com o duplo igual, 10 numeral e "10" texto sao iguais ). === vai fazer a comparação citada retro, bem como o tipo assim 10 numeral é diferente do "10" texto

Boa Gisely , esqueci de colocar rsrsrs. Obrigado por complementar

No JS é comparado Objeto e o atributo. Quando o Objeto é usado ==, quando o Objeto e o Atributo é usado ===, na questão vimos que são declaradas cinco variáveis e depois os seus valores são reatribuídos. No primeiro caso vemos (x1= z++ == ++y) onde x1 esta sendo comparado a y apenas como objeto. e logo concluímos que é verdadeiro.

Complementando com a explicação da operação em x3:

x3= y+1 === z && 10 != "20"

Separando por partes:

y+1 === z

y+1 > 11+1 = 12

z = 12

logo são iguais numericamente e também iguais em tipo, logo = TRUE

&& - "E" lógico, conjunção (operador binário), com curto-circuito, ou seja, se a primeiro operação fosse FALSE, ele não avaliaria a segunda operação.

Como deu TRUE, avalia a segunda operação:

10 != "20"

O resultado é TRUE, porque 10 é diferente do caractere "20".

Resultado final:

x3 = TRUE && TRUE = TRUE

Obs: && só da TRUE quando AMBAS as partes dão TRUE.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo