2009-12-29 4 views
0
259 function isNumeric(strString) { 
260 var strValidChars = ""; 
261 var strChar; 
262 var blnResult = true; 
263 
264 if (strString.length == 0) { 
265 return false; 
266 } 
267 
268 // Test strString consists of valid characters listed above 
269 for (i = 0; i < strString.length && blnResult == true; i++) 
270 { 
271 strChar = strString.charAt(i); 
272 if (strValidChars.indexOf(strChar) == -1) 
273 { 
274 blnResult = false; 
275 } 
276 } 
277 return blnResult; 
278 } 

Firefox se bloque sur la ligne 264 avec le message suivant:Pourquoi ce code JS échoue-t-il?

strString is undefined

Pourquoi ce code échouent? strString est un paramètre formel de la fonction isNumeric, il doit donc toujours être défini.

+3

Comment appelez-vous cette fonction? –

+1

Tout ce que vous pensez que vous transmettez dans cette fonction n'est pas transmis. – Sampson

Répondre

4

Le code appelant votre fonction ne fournit pas de valeur définie pour cette variable.

0

Je ne suis pas sûr, mais en regardant ce que la fonction je dirais c'est l'endroit parfait pour une expression régulière Pourquoi n'êtes-vous pas using one? Il semble plus capable que la fonction que vous avez prise de Code Toad .

0

Vous êtes probablement faire passer une valeur indéfinie à votre fonction du code appelant la propriété de longueur est uniquement définie pour les chaînes et les tableaux, donc le message d'erreur Vous pourriez tester non défini comme ceci:..

if (typeof strString == "undefined") { 
    return false; 
} 
0

Remplacer

if (strString.length == 0) { 

avec

if (strString == null || strString.length == 0) { 
2

Recréez l'erreur comme si ...

javascript:alert(isNumeric(undefinded)); 

et le fixer comme si ...

function isNumeric(strString) { 
    strString = strString + ""; 

Mais pourquoi ne pas utiliser régulièrement expression?

function isNumeric(val) { 
    return /^[0-9]+$/.test(val); 
} 
0

Pourquoi dites-vous que c'est un paramater formel ?

JavaScript est très flexible avec des paramètres; il ne lance aucun avertissement lorsque le nombre de paramètres que vous passez est différent de la définition. C'est plutôt flexible mais aussi déroutant pour les personnes qui viennent d'un arrière-plan C/C++.

+0

Les paramètres de fonction JavaScript sont appelés paramètres formels. Essayez '(function (;) {}())' et vous obtiendrez 'SyntaxError: paramètre formel manquant' dans les deux moteurs JavaScript. Vous ne savez pas ce que vous obtiendrez dans les moteurs ECMAScript comme v8 et WebKit. –

Questions connexes