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

465
Visualizações
¿Por qué [NaN].includes (NaN) devuelve verdadero en JavaScript?

Estoy familiarizado con NaN siendo "raro" en JavaScript, es decir, NaN === NaN siempre devuelve false , como se describe aquí . Por lo tanto, no se deben hacer comparaciones === para verificar NaN , sino usar isNaN(..) en su lugar.

Así que me sorprendió descubrir que

 > [NaN].includes(NaN) true

Esto parece inconsistente. ¿Por qué tener este comportamiento?

¿Cómo funciona? ¿El método includes comprueba específicamente isNaN ?

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

0

Según el documento de MDN dice que

Nota: Técnicamente hablando, include includes() usa el algoritmo sameValueZero para determinar si se encuentra el elemento dado.

 const x = NaN, y = NaN; console.log(x == y); // false -> using 'loose' equality console.log(x === y); // false -> using 'strict' equality console.log([x].indexOf(y)); // -1 (false) -> using 'strict' equality console.log(Object.is(x, y)); // true -> using 'Same-value' equality console.log([x].includes(y)); // true -> using 'Same-value-zero' equality


Explicación más detallada:

  1. La igualdad del mismo valor cero es similar a la igualdad del mismo valor , pero +0 y −0 se consideran iguales .
  2. El método Object.is() proporciona la igualdad del mismo valor : la única diferencia entre Object.is() y === está en su tratamiento de los ceros con signo y los NaN.

ingrese la descripción de la imagen aquí


Recursos adicionales:

  • ¿Qué operador es igual (== vs ===) debe usarse en las comparaciones de JavaScript?
  • Array.prototype.includes frente a Array.prototype.indexOf
  • ¿+0 y -0 son lo mismo?
over 4 years ago · Santiago Trujillo Relatório

0

El método .includes() usa el algoritmo SameValueZero para verificar la igualdad de dos valores y considera que el valor de NaN es igual a sí mismo.

El algoritmo SameValueZero es similar a SameValue , pero la única diferencia es que el algoritmo SameValueZero considera que +0 y -0 son iguales.

El método Object.is() usa SameValue y devuelve verdadero para NaN .

 console.log(Object.is(NaN, NaN));

El comportamiento del método .includes() es ligeramente diferente del método .indexOf() ; el método .indexOf() usa una comparación de igualdad estricta para comparar valores y la comparación de igualdad estricta no considera que NaN sea igual a sí mismo.

 console.log([NaN].indexOf(NaN));

Puede encontrar información sobre diferentes algoritmos de verificación de igualdad en MDN:

MDN - Comparaciones de igualdad y semejanza

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