Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
Lógica booleana de Javascript (comparando doble explosión con valores verdaderos/falsos)

Estoy inspeccionando un código y encontré algo que me gustaría que ejecutaran los veteranos de Javascript. Me siento bastante cómodo con Javascript, pero siempre me las arreglo para encontrarme con algo que me hace decir: "¡No sabía eso sobre Javascript!".

Espero que esta sea una de esas situaciones:

 if (this.props.referralId != prevProps.referralId || this.props.referralValidationStatus != prevProps.referralValidationStatus || this.props.customerName != prevProps.customerName && !!prevProps.personId != !this.props.personId) { // perform whatever logic is here... }

Mis preguntas:

  1. ¿JS sabe cómo identificar automáticamente la mezcla de || y &&? ¿O a este código le faltan paréntesis alrededor de || ¿comparación?
  2. Tal como se explica aquí , ¿es justo y debo esperar el comportamiento obvio al comparar un valor booleano con un valor verdadero/falso?

Estoy desconcertado sobre cuál debería ser la lógica aquí. Si tuviera que reescribir esto, lo haría así:

 if ((this.props.referralId !== prevProps.referralId || this.props.referralValidationStatus !== prevProps.referralValidationStatus || this.props.customerName !== prevProps.customerName) && (!!prevProps.personId === !!this.props.personId)) { // Perform logic }

Sin embargo, me gustaría confirmar y asegurarme de que no me estoy perdiendo algo que podría haberme perdido sobre JS.

Gracias de antemano por confirmar mi corazonada o educarme sobre algo nuevo cuando se trata de JS. Espero sus comentarios y/o respuestas.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

  1. Como la mayoría de los lenguajes, hay una regla de precedencia en Javascript. && se evalúan antes || como se puede ver aquí . Entonces, si necesita verificar todos los ors y luego usar el resultado final para hacer and , ¡tiene razón! Usa el paréntesis.

  2. También tienes razón sobre el !! refactorización:

 !!prevProps.personId != !this.props.personId

Es lo mismo que:

 !!prevProps.personId === !!this.props.personId

En otras palabras, está comprobando si tanto prevProps.personId como this.props.personId tienen algún valor (evaluado como True como booleano), o si ambos están vacíos/indefinidos/Nan (evaluado como False como booleano).

about 4 years ago · Juan Pablo Isaza Denunciar

0

La primera declaración dice (pseudocódigo):

 if ( //the first statement returns truthy this.props.referralId != prevProps.referralId || // or the second statement returns truthy this.props.referralValidationStatus != prevProps.referralValidationStatus || // or the combination of the third and fourth statements returns truthy this.props.customerName != prevProps.customerName && !!prevProps.personId != !this.props.personId ) // then... { // perform whatever logic is here }

Su versión reescrita dice (pseudocódigo):

 if ( // one of these three statements is truthy (this.props.referralId !== prevProps.referralId || this.props.referralValidationStatus !== prevProps.referralValidationStatus || this.props.customerName !== prevProps.customerName) && // AND! // this statement also evaluates truthy (!!prevProps.personId === !!this.props.personId) ) // then... { // perform whatever logic is here }

Esperemos que esto explique las diferencias entre los bloques de código.

@rafaelodon es por lo demás correcto

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda