在JavaScript函数中返回undefined

时间:2012-06-01 20:42:57

标签: javascript undefined

当我调用此函数时,发送例如:abc作为参数, 函数返回:undefinedcba。我无法弄清楚它为什么会添加 'undefined'到我的返回值。我可能忽略了一些显而易见的事情 但我无法发现它。谢谢。

function FirstReverse(str) { 
    var str_arr1 = new Array();
    var ans = '';
    for(i=0; i < str.length; i++) {
        str_arr1.push(str.charAt(i));
    }
    for(j=str.length; j >= 0; j--) {
        ans += str_arr1[j];
    }
    return ans; 
}

5 个答案:

答案 0 :(得分:9)

字符串是0索引的。 str[str.length]不存在。

j需要从str.length - 1开始。

或者,只是return str_arr1.join();

答案 1 :(得分:1)

字符串的索引从0开始,因此string.length总是比字符串中最后一个字符的索引大一个数字。

在第二个for循环中,使用

for(var j=str.length -1; j >= 0; j--) {

答案 2 :(得分:0)

错误发生在第二个for语句中。请参阅解决方案:

function FirstReverse(str) { 
    var str_arr1 = new Array();
    var ans = '';
    for(i=0; i < str.length; i++) {
        str_arr1.push(str.charAt(i));
    }
    for(j=str.length-1; j >= 0; j--) {
        ans += str_arr1[j];
    }
    return ans;
}

答案 3 :(得分:0)

因为当你传递'abc'时,它只有3个字符。 所以arrray str_arr在索引0,1和2处有元素。 但是您正在循环str.length,即3次,str_arr[3]未定义。

你应该这样做,

function FirstReverse(str) {  
  var str_arr1 = new Array();
  var ans = '';
  for(i=0; i < str.length; i++) {
    str_arr1.push(str.charAt(i));
  }
  for(j=str.length-1; j >= 0; j--) {
    ans += str_arr1[j];
  }
  return ans;  
}

答案 4 :(得分:0)

看起来你想要反转一个字符串,你可以在这个javascript one liner

中做
function reverse(s){
    return s.split("").reverse().join("");
}

您获得未定义的原因是因为jstr.length开头,而str.length-1. str_arr1[str.length]应该是{{1}}超出范围,因此将是未定义的。