Le JavaScript intégré isNaN fonction, est - comme cela devrait être attendu par défaut - un « type dynamique de l' opérateur ». Par conséquent, toutes les valeurs qui (pendant le processus DTC) peuvent donner un simple true | false tel que "", " ", " 000"
, ne peut pas être NaN.
Cela signifie que l' argument fourni subira d'abord une conversion comme dans:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
Explication:
Dans la ligne supérieure du corps de la fonction, nous essayons (d'abord) de convertir avec succès l'argument en un objet numérique. Et (deuxièmement), en utilisant l'opérateur point, nous supprimons immédiatement, pour notre propre convenance, la valeur primitive de l'objet créé.
Dans la deuxième ligne, on prend la valeur obtenue à l'étape précédente, et l'avantage du fait que NaN n'est égal à rien dans l'univers, pas même à lui-même, par exemple: NaN == NaN >> false
pour enfin le comparer (pour l'inégalité) avec lui-même .
De cette façon, la fonction return ne donnera vrai que lorsque, et seulement si, l'argument-retour fourni est une tentative infructueuse de conversion en un objet numérique, c'est-à-dire un nombre non-un-nombre; par exemple, NaN.
isNaNstatic ()
Cependant, pour un opérateur de type statique - si nécessaire et si nécessaire - nous pouvons écrire une fonction beaucoup plus simple telle que:
function isNaNstatic(x){
return x != x;
}
Et évitez complètement le DTC afin que si l'argument n'est pas explicitement un nombre NaN, il renverra faux. Par conséquent, testez les éléments suivants:
isNaNStatic(" x"); // will return false
parce que c'est toujours une chaîne.
Cependant:
isNaNStatic(1/"x"); // will of course return true.
comme par exemple isNaNStatic(NaN); >> true
.
Mais contrairement à isNaN
, le isNaNStatic("NaN"); >> false
car il (l'argument) est une chaîne ordinaire.
ps: La version statique d'isNaN peut être très utile dans les scénarios de codage modernes. Et cela peut très bien être l'une des principales raisons pour lesquelles j'ai pris mon temps pour publier ceci.
Cordialement.