Pode (a== 1 && a ==2 && a==3) ser verdadeiro em JavaScript?
Esta entrevista desconcertante questão desafia a compreensão do operador de igualdade do JavaScript (==). A questão pergunta se é possível fazer com que a expressão (a== 1 && a ==2 && a==3) seja avaliada como verdadeira.
À primeira vista, parece impossível, pois a não pode ser igual a três valores distintos simultaneamente. No entanto, um truque inteligente explora a natureza maleável do operador == do JavaScript.
Em JavaScript, == executa coerção de tipo, o que permite comparações de valores inesperadas. Ao definir um objeto com uma função toString() ou valueOf() personalizada, pode-se manipular o valor retornado ao comparar o objeto a um número.
Por exemplo, considere o seguinte código:
const a = {
i: 1,
toString: function () {
return a.i ;
}
};
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
Aqui, o objeto a possui uma propriedade i inicializada com 1. Sua função toString() é definida para incrementar i e retornar seu valor, alterando efetivamente a representação do objeto a cada comparação.
Quando a é comparado pela primeira vez com 1, i é incrementado para 2. Na segunda comparação, i é novamente incrementado para 3, satisfazendo a condição de igualdade. Finalmente, na terceira comparação, i é incrementado para 4, mas o tipo coercion o converte de volta para 3, resultando em uma correspondência.
Assim, aproveitando o operador de igualdade flexível do JavaScript e definindo um objeto personalizado, ele é de fato possível satisfazer a expressão (a== 1 && a ==2 && a==3), fazendo com que ela seja avaliada como verdadeira.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3