53 votes

Rupture sur NaN en JavaScript

Existe-t-il un navigateur moderne qui lève des exceptions lors de la propagation de NaN (c'est-à-dire la multiplication ou l'addition d'un nombre à NaN), ou qui peut être configuré pour le faire ?

La propagation silencieuse des NaN est une source terrible et insidieuse de bogues, et j'aimerais pouvoir les détecter à temps, même si les performances en pâtissent.


Voici un exemple de bug qui use strict , jshint et al. n'ont pas décroché :

object = new MyObject();
object.position.x = 0;
object.position.y = 10;

// ... lots of code

var newPosition = object.position + 1; // <- this is an error, and should
                                       //    have been object.position.x
                                       //    however it fails *silently*,
                                       //    rather than loudly

newPosition *= 2;                      // <- this doesn't raise any errors either.
                                       //    this code is actually ok if the
                                       //    previous line had been correct

Note : Le compilateur TypeScript est capable de détecter des erreurs comme celles ci-dessus, même dans le code JS, si l'inférence de type réussit.

1 votes

Vous pouvez vérifier isNaN() ?

10 votes

Je n'ai pas vraiment envie de truffer mon code de isNaNs à chaque fois que j'ajoute des chiffres.

0 votes

@RUJordan vous pouvez certainement. Mais cela se traduit par BEAUCOUP de code.

-1voto

BlackPOP Points 1930

Java script supporte également la gestion des exceptions. Utilisez donc le bloc try catch pour attraper une exception et dans le bloc catch vous pouvez gérer tout type d'erreur.

try{
if(typeof object.Position=="number") 
{
var newPosition = object.position + 1;}
else 
{
throw "Error"
}
}
catch (e)
{/exception handling}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X