Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

255
Visualizações
¿Puede (a== 1 && a ==2 && a==3) alguna vez evaluarse como verdadero?

Nota del moderador: resista la tentación de editar el código o eliminar este aviso. El patrón de espacios en blanco puede ser parte de la pregunta y, por lo tanto, no debe manipularse innecesariamente. Si está en el campo "los espacios en blanco son insignificantes", debería poder aceptar el código tal como está.

¿Es posible que (a== 1 && a ==2 && a==3) pueda evaluarse como true en JavaScript?

Esta es una pregunta de entrevista hecha por una importante empresa de tecnología. Sucedió hace dos semanas, pero todavía estoy tratando de encontrar la respuesta. Sé que nunca escribimos dicho código en nuestro trabajo diario, pero tengo curiosidad.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Si aprovecha cómo funciona == , podría simplemente crear un objeto con una función personalizada toString (o valueOf ) que cambia lo que devuelve cada vez que se usa para que satisfaga las tres condiciones.

 const a = { i: 1, toString: function () { return a.i++; } } if(a == 1 && a == 2 && a == 3) { console.log('Hello World!'); }


La razón por la que esto funciona se debe al uso del operador de igualdad flexible. Cuando se usa igualdad flexible, si uno de los operandos es de un tipo diferente al otro, el motor intentará convertir uno al otro. En el caso de un objeto a la izquierda y un número a la derecha, intentará convertir el objeto en un número llamando primero a valueOf si se puede llamar y, en su defecto, llamará a toString . Solía usar toString en este caso simplemente porque es lo que me vino a la mente, valueOf tendría más sentido. Si, en cambio, devolviera una cadena de toString , el motor habría intentado convertir la cadena en un número que nos daría el mismo resultado final, aunque con una ruta un poco más larga.

over 4 years ago · Santiago Trujillo Relatório

0

No pude resistirme: las otras respuestas son indudablemente ciertas, pero realmente no puedes pasar por alto el siguiente código:

 var aᅠ = 1; var a = 2; var ᅠa = 3; if(aᅠ==1 && a== 2 &&ᅠa==3) { console.log("Why hello there!") }

Tenga en cuenta el espaciado extraño en la declaración if (que copié de su pregunta). Es el Hangul de ancho medio (que es coreano para aquellos que no están familiarizados), que es un carácter de espacio Unicode que el script ECMA no interpreta como un carácter de espacio; esto significa que es un carácter válido para un identificador. Por lo tanto, hay tres variables completamente diferentes, una con Hangul después de la a, otra con él antes y la última con solo una. Reemplazando el espacio con _ para facilitar la lectura, el mismo código se vería así:

 var a_ = 1; var a = 2; var _a = 3; if(a_==1 && a== 2 &&_a==3) { console.log("Why hello there!") }

Consulte la validación en el validador de nombres de variables de Mathias . Si ese espacio extraño se incluyó realmente en su pregunta, estoy seguro de que es una pista para este tipo de respuesta.

No hagas esto. Seriamente.

Editar: me ha llamado la atención que (aunque no se permite iniciar una variable) los caracteres de unión de ancho cero y los caracteres que no se unen de ancho cero también están permitidos en nombres de variables; consulte Ofuscación de JavaScript con caracteres de ancho cero: pros y contras ? .

Esto se vería como lo siguiente:

 var a= 1; var a‍= 2; //one zero-width character var a‍‍= 3; //two zero-width characters (or you can use the other one) if(a==1&&a‍==2&&a‍‍==3) { console.log("Why hello there!") }

over 4 years ago · Santiago Trujillo Relatório

0

¡ES POSIBLE!

 var i = 0; with({ get a() { return ++i; } }) { if (a == 1 && a == 2 && a == 3) console.log("wohoo"); }

Esto usa un getter dentro de una declaración with para permitir que a evaluación se evalúe en tres valores diferentes.

... esto todavía no significa que deba usarse en código real ...

Peor aún, este truco también funcionará con el uso de === .

 var i = 0; with({ get a() { return ++i; } }) { if (a !== a) console.log("yep, this is printed."); }

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda