Skip to content

Instantly share code, notes, and snippets.

@Cycymomo
Last active January 4, 2016 03:49
Show Gist options
  • Save Cycymomo/8564032 to your computer and use it in GitHub Desktop.
Save Cycymomo/8564032 to your computer and use it in GitHub Desktop.
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

Gné ?

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment