¿Puede (a== 1 && a ==2 && a==3) ser verdad en JavaScript?
Esta entrevista desconcertante La pregunta desafía la comprensión del operador de igualdad de JavaScript (==). La pregunta es si es posible hacer que la expresión (a== 1 && a ==2 && a==3) se evalúe como verdadera.
A primera vista, parece imposible, ya que a no puede ser igual a tres valores distintos simultáneamente. Sin embargo, un truco inteligente explota la naturaleza maleable del operador == de JavaScript.
En JavaScript, == realiza coerción de tipos, lo que permite comparaciones de valores inesperadas. Al definir un objeto con una función personalizada toString() o valueOf(), se puede manipular el valor devuelto al comparar el objeto con un número.
Por ejemplo, considere el siguiente código:
const a = {
i: 1,
toString: function () {
return a.i ;
}
};
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
Aquí, el objeto a tiene una propiedad i inicializada en 1. Su función toString() está definida para incrementar i y devolver su valor, cambiando efectivamente la representación del objeto con cada comparación.
Cuando a se compara por primera vez con 1, i se incrementa a 2. En la segunda comparación, i se incrementa nuevamente a 3, satisfaciendo la condición de igualdad. Finalmente, en la tercera comparación, i se incrementa a 4, pero la coerción de tipos lo convierte nuevamente a 3, lo que resulta en una coincidencia.
Por lo tanto, al aprovechar el operador de igualdad flexible de JavaScript y definir un objeto personalizado, De hecho, es posible satisfacer la expresión (a== 1 && a ==2 && a==3), haciendo que se evalúe como verdadera.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3