Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

217
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!