为什么我的代码总是以undefined结尾?

时间:2014-09-23 17:49:23

标签: javascript undefined

我写了这个JavaScript代码,但它始终结束** undefined ** mycode?我做错了什么/将来如何防止这种情况发生。我正在通过chrome javascript控制台运行我的代码。

这是我的代码

    //Reverse a string
//-------------------------//
//Input a string

var string = prompt("Please enter string");
            //console.log(string);

//Find length of string

var stringLength = string.length;
            //console.log(stringLength);

//Creating an empty string for outputting answer

var reversedString = "";

//Start from length of the string and work backwards, inputting letter 1 at a time.
for (var i = stringLength; i >= 0; i--){
    reversedString += string[i];
                //console.log(string[i]);
}

//Outputting the reversed string;
alert(reversedString);

预先感谢您的任何答案

4 个答案:

答案 0 :(得分:2)

更改循环
for (var i = stringLength; i >= 0; i--){

for (var i = stringLength-1; i >= 0; i--){

问题是,javascript中的数组索引是基于0的。

让我们说在提示符中输入的字符串是“abc”,字符串的长度是3.在循环中,您可以将其作为string[3]访问,这是未定义的。因此错误。

以下是演示更新代码的小提琴:

答案 1 :(得分:0)

你不应该做string [i]而不是string.charAt(i);同时将stringLength更改为stringLength - 1.这应该可以解决您的问题。如果您希望在不同的浏览器中使用它,请使用charAt表示法。 Javascript数组从0开始而不是1,这就是为什么你做长度 - 1来获取最后一个元素。例如: 对于10个元素,数组索引是0-9。 10位于数组的边界之外。

for (var i = (stringLength - 1); i >= 0; i--){
reversedString += string.charAt(i);

这是正确答案。

答案 2 :(得分:0)

在提醒你之前添加string [i]是这段代码的最后一件事,因此最后一个字符串[i],(我假设你的数组中的第一个元素)的值是undefined。

for (var i = stringLength; i >= 0; i--){
        reversedString += string[i];
                //console.log(string[i]);
}

我不知道为什么会这样,但我知道坚持惯例是总是一个好主意,for循环的那个是:

for(var i = 0; i < [length variable];i++) {
    ...
}

答案 3 :(得分:0)

正确的代码

for (var i = stringLength-1; i >= 0; i--){
    reversedString += string[i];
    console.log(string[i]);
}