179 votes

Pourquoi isNaN ("") est-il faux?

J'ai une petite question (j'espère!). Dans JS, pourquoi isNaN(" ") considérés comme faux, mais isNaN(" x") considérés comme vrais?

J'effectue des opérations numériques sur un champ de saisie de texte et vérifie si le champ est nul, "" ou NaN. Quand quelqu'un tape une poignée d'espaces dans le champ, ma validation échoue sur les trois, et je ne comprends pas pourquoi il passe le test isNAN.

Merci!

170voto

Antonio Haley Points 2588

JavaScript interprète une chaîne vide comme un 0, qui échoue alors au test isNAN. Vous pouvez utiliser d'abord parseInt sur la chaîne qui ne convertira pas la chaîne vide en 0. Le résultat devrait alors échouer isNAN.

85voto

Nick Berardi Points 31361

Vous pouvez trouver cela surprenant ou peut-être pas, mais voici un code de test pour vous montrer la folie du moteur JavaScript.

 document.write(isNaN("")) // false
document.write(isNaN(" "))  // false
document.write(isNaN(0))  // false
document.write(isNaN(null)) // false
document.write(isNaN(false))  // false
document.write("" == false)  // true
document.write("" == 0)  // true
document.write(" " == 0)  // true
document.write(" " == false)  // true
document.write(0 == false) // true
document.write(" " == "") // false
 

donc cela signifie que

 " " == 0 == false
 

et

 "" == 0 == false
 

mais

 "" != " "
 

S'amuser :)

18voto

Rafael Points 9065

Pour mieux le comprendre, s’il vous plaît ouvrez Ecma Script spec pdf àlapage 43 « ToNumber appliqués au Type de chaîne »

Si une chaîne a une syntaxe numérique, qui peut contenir un nombre quelconque de caractères d’espace blanc, il peut être converti au type de numéro. Chaîne vide renvoie la valeur 0. Aussi la chaîne « Infinity » devrait donner

12voto

bendewey Points 25437

Essayez d’utiliser :

Ou

6voto

Greg Points 132247

Je pense que c’est à cause de Javascript taper : est converti à zéro, alors que n’est pas :

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