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

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

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