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

255
Views
¿Cómo se prueba NaN en JavaScript?

Tengo una variable x y quiero probar si x está configurada en NaN. ¿Cómo puedo hacer eso?

Mi primer instinto probablemente sea, ya sabes, probarlo, así:

 if (x === NaN) { ...

Conejo tonto, no, eso sería demasiado fácil. NaN es como NULL en SQL, no es igual a nada, ni siquiera a sí mismo.

Pero mira, hay una función llamada isNaN() -- ¡quizás eso lo haga!

No, por lo que puedo decir, isNaN() no tiene ningún valor.

Por ejemplo, isNaN([""]) correctamente devuelve falso, pero isNaN(["."]) devuelve verdadero. No querrás saber cómo me enteré de este defecto.

¿Cómo hago esto?

Resulta que mi pregunta es un duplicado de esta , pero la respuesta seleccionada es incorrecta. La respuesta correcta tiene un 20% de votos a favor.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Respuesta corta

Para usuarios de ECMAScript-5:

 #1 if(x !== x) { console.info('x is NaN.'); } else { console.info('x is NOT a NaN.'); }

Para las personas que usan ECMAScript-6:

 #2 Number.isNaN(x);

Y para fines de coherencia en ECMAScript 5 y 6, también puede usar este relleno polimérico para Number.isNan

 #3 //Polyfill from MDN Number.isNaN = Number.isNaN || function(value) { return typeof value === "number" && isNaN(value); } // Or Number.isNaN = Number.isNaN || function(value) { return value !== value; }

Nota: prefiero probar usando el n. ° 1, que funciona igual en todos los lugares y tampoco depende del último JS. (Siempre me da el resultado correcto. ¡Sin sorpresas!)


Explicación detallada:

Aquí está nuestro increíble NaN

 NaN == NaN; // false NaN === NaN; // false

No culpe a JavaScript por esto, se supone que NaN se comporta de esta manera en otros idiomas, lo cual está bien según la lógica de todas las comparaciones que devuelven valores falsos de NaN.

Entonces viene isNaN como nuestro salvador, pero espera, actúa de manera un poco diferente en algunos escenarios como

 isNaN(undefined); // true isNaN({}); // true isNaN("lorem ipsum"); // true

Tuve algunas caras extrañas al ver los resultados anteriores. Y aquí viene la razón de MDN

Cuando el argumento de la función isNaN no es de tipo Number, el valor primero se coacciona a Number. Luego, el valor resultante se prueba para determinar si es NaN.

Entonces, ¿cómo deberíamos probar NaN para las variables que no son números? yo siempre paso por lo siguiente

 if(x !== x) { console.info('Is a NaN'); } else { console.info('Not a NaN'); }

ECMAScript-6/JavaScript-2015 Actualizaciones

¿Tenemos algo en ECMAScript-6 para el mismo. Sí, lo hacemos...

 Number.isNaN(x); // true

La implementación de ES6 también será útil para los casos anteriores como

 Number.isNaN(undefined); // false Number.isNaN({}); // false Number.isNaN("lorem ipsum"); // false

mientras que la función global ECMAScript-5 isNaN resultado true para los casos anteriores, que a veces pueden no alinearse con nuestras expectativas.

over 4 years ago · Santiago Trujillo Report

0

La pregunta tiene la respuesta si lees lo suficientemente de cerca. Así es como lo encontré: estaba escribiendo la pregunta y... bingo.

¿Recuerdas cuando escribí " NaN es como NULL en SQL, no es igual a nada, ni siquiera a sí mismo"? Hasta donde yo sé, NaN es el único valor en Javascript con esta propiedad. Por lo tanto puedes escribir:

 var reallyIsNaN = function(x) { return x !== x; };
over 4 years ago · Santiago Trujillo 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!