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

192
Vistas
¿Supervisar y registrar valores de NaN en JavaScript/TypeScript durante el tiempo de ejecución?

¿Hay alguna forma de detectar, o protegerse de manera segura, los valores de NaN durante el tiempo de ejecución, en cualquier parte de la aplicación donde puedan aparecer?

  • A) ¿Existe una pelusa segura para advertir sobre los posibles valores de NaN que pueden ocurrir en ciertas construcciones?
  • B) Alternativamente, ¿algún tipo de solución que monitoree el JavaScript ejecutado durante el tiempo de ejecución, lo detecte y registre o alerte al respecto? - ¿Similar a cómo funcionan los servicios de detección de errores?

Ejemplo

Pseudocódigo de un escenario donde la prueba de NaN puede ser difícil:

 function undetectedNaN (): AssumeStrictDataTypes { // 1. Some algorithm ... // 2. NaN appears undetected ... // 3. Some algorithm ... // 4. Return: Broken but seeming legit value and data type }

(Suponga que está en una base de código de aplicación más grande, donde agregar controles para isNaN() y validar valores individuales no es una opción: podría ser demasiado costoso, no es un requisito, no es posible realizar pruebas automatizadas, etc.)


ACTUALIZACIÓN 2021/12: Para complementar mi pregunta bastante abstracta: en un caso de uso más práctico, los valores de API no existían en una estructura de matriz. La mayoría de las ocurrencias de NaN podrían resolverse mediante una mejor verificación de valor/tipo.

 function example (a, b) { return a[0] + b[0] } // undefined + undefined = NaN const result = example([], []); console.log(result);

Algunas otras posibilidades de que ocurra NaN :

 const testArray = []; const testObject = {}; testArray[0] + testArray[0] // NaN testObject.X + testObject.X // NaN undefined + undefined // NaN NaN + NaN // NaN

Otros lugares donde NaN puede ser más difícil de rastrear: por ejemplo, si aparece durante el tiempo de ejecución, en algún lugar, a veces, y no es un valor de retorno comprobable.

 // Bitwise operators ~(NaN) // -1 // Conditionals if (NaN > 1) {} // false // Typecasting !!NaN // false
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No hay una forma sencilla de lograr esto.

No hay una manera fácil de detectar esto estáticamente (para un linter). NaN puede ser el resultado de operaciones simples como la multiplicación y la división, por lo que podría ocurrir en cualquier lugar.

Por supuesto, sería técnicamente posible detectar expresiones que siempre evalúen a NaN , como si tuviera que escribir 0/0 . Pero esto probablemente no es lo que estás buscando.

Que yo sepa, no existe un marco que pueda detectar que NaN ocurre en algún lugar en tiempo de ejecución. Creo que para lograr esto de la manera que desea, necesitaría soporte para ello a nivel de motor JS.

Podría inventar soluciones pirateadas como crear funciones para operaciones aritméticas como multiply o envolver números en objetos que anulen la función valueOf() . Pero ninguno de ellos funcionará en todos los casos y hacen que su código sea mucho menos agradable.

Al final, NaN es un número perfectamente válido. Lo detectaría como detectaría cualquier otro valor. Por ejemplo, si su algoritmo no puede manejar números negativos, tampoco puede modificar el lenguaje para que le indique cuándo tiene números negativos. En su lugar, tendría que diseñar su código de tal manera que no se produzcan valores negativos o escribir muchas comprobaciones/afirmaciones.

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