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

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

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