为什么这个JS代码失败了?

时间:2009-12-29 14:40:44

标签: javascript

259 function isNumeric(strString) { 
260 var strValidChars = "0123456789";
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在第264行崩溃,并显示以下消息:

  

strString未定义

为什么这段代码失败了? strString是isNumeric函数的形式参数,因此应始终定义它。

6 个答案:

答案 0 :(得分:4)

调用函数的代码没有为该变量提供定义的值。

答案 1 :(得分:2)

重新创建错误......

javascript:alert(isNumeric(undefinded));

并修复它......

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

但为什么不使用正则表达式?

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

答案 2 :(得分:0)

我不确定,但看看这个功能我会说这是正则表达式的最佳位置。为什么不是你using one?它看起来比你所用的功能更强大来自Code Toad。

答案 3 :(得分:0)

您可能正在从调用代码向函数传递未定义的值。 length属性仅为字符串和数组定义,因此是错误消息。您可以像这样测试undefined:

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

答案 4 :(得分:0)

替换

if (strString.length == 0) {

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

答案 5 :(得分:0)

为什么你说这是正式参数?

JavaScript对参数非常灵活;当您传递的参数数量与定义不同时,它不会发出任何警告。这对于来自C / C ++背景的人来说相当灵活但也令人困惑。