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

216
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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