Cycymomo
1/22/2014 - 6:08 PM

isNaN.md

isNaN.md

isNaN : Je suis NaN ! Mais ne suis-je pas un nombre aussi ?

ou pourquoi il ne faut pas faire confiance à isNaN

tl;dr

isNaN(valeurAtester) (de l'objet global window dans le navigateur) est une fonction native JavaScript. C'est aussi, depuis peu, une méthode directe de l'objet natif Number qui tente de résoudre l'échec de son ancêtre. Elle prend en argument une variable à tester et retourne vraie si celle-ci est NaN (Not a Number, littérallement est "Pas un Nombre"). Il ne faut pas confondre window.isNaN et la plus récente Number.isNaN. En effet, cette dernière corrige la première. Cet article analyse donc ces deux fonctions et propose une bonne pratique.

Le problème

isNaN signifie is Not a Number, ce qui se traduit littérallement par est "Pas un Nombre". On serait donc en droit de se dire que si la valeur qu'on lui passe n'est pas un nombre, elle me renvoie true. Voici une liste de valeurs qui, à première vue, ne sont pas des nombres : true, false, '', 5e3, Infinity, [0], new Date().

// On passe donc ces valeurs à la fonction, qui est censée nous renvoyer true (vrai, ces valeurs ne sont pas des nombres !)
isNaN(true); // false
isNaN(false); // false
isNaN(''); // false
isNaN('5e3'); // false
isNaN('Infinity'); // false
isNaN([0]); // false
isNaN(new Date); // false

Sources :

  1. ES5 spéc.
  2. isNaN (MDN)
  3. https://gist.github.com/Nickdouille/5929008
  4. https://gist.github.com/1013691/28a9145f4fd01b83596fcaa50feb29499bc7d74b
  5. https://gist.github.com/kitcambridge/1086528
  6. https://twitter.com/bloodyowl/status/433977122307473408