Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的代码总是以未定义结尾?_Javascript_Undefined - Fatal编程技术网

Javascript 为什么我的代码总是以未定义结尾?

Javascript 为什么我的代码总是以未定义结尾?,javascript,undefined,Javascript,Undefined,我写了这个JavaScript代码,但它总是以**未定义**mycode结尾?我做错了什么/我如何防止将来发生这种情况。我正在通过chrome javascript控制台运行代码 这是我的密码 //Reverse a string //-------------------------// //Input a string var string = prompt("Please enter string"); //console.log(string); //

我写了这个JavaScript代码,但它总是以**未定义**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);
感谢您提前给出任何答案

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

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

假设在提示中输入的字符串是“abc”,字符串的长度是3。在循环中,您可以作为未定义的
string[3]
访问它。因此出现了错误

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


    • 您不应该执行string[i]而应该执行string.charAt(i);同时将stringLength更改为stringLength-1。这会解决你的问题。如果您想在不同的浏览器中使用字符表示法。Javascript数组从0开始,而不是从1开始,这就是为什么要使用length-1来获取最后一个元素。例如: 对于10个元素的数组,索引为0-9。10位于阵列的边界之外

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

      这是正确答案。

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

      for (var i = stringLength; i >= 0; i--){
              reversedString += string[i];
                      //console.log(string[i]);
      }
      
      我不知道为什么会这样,但我知道坚持惯例总是一个好主意,循环的一个办法是:

      for(var i = 0; i < [length variable];i++) {
          ...
      }
      
      for(变量i=0;i<[长度变量];i++){
      ...
      }
      
      右侧代码

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

      什么是未定义的?代码本身不能是未定义的。如果输入hello,则输出为未定义的dolleh。因此,代码正常工作,但单词undefined会自动放在它前面YOh,您指的是
      alert()
      中显示的字符串,而不是控制台中的结果。请回答您的问题以使问题更清楚。感谢所有回答。我第一次在这里问了一个问题,我对快速的回答感到惊讶。所有的答案都是我一直在寻找的,我希望我能很快进步到一个我不会经常犯这些错误的阶段。为什么?对于初学者来说,一个解释肯定会更有帮助。因为根据所有数组的定义,a[a.length]是未定义的。不,这不是问题所在。编辑:问题在于循环变量,而不是括号符号。缺少
      charAt
      将导致代码在Internet Explorer上中断。这是好是坏取决于你的良心。如果你想让它在不同浏览器间运行,请使用charAt not[]这将是@Felix Klingb的问题,但这不是op面临的问题,而你最初声称是。我正在帮助他解决未来可能面临的问题。我还告诉他他问的问题……那么你的问题是什么?
      for (var i = stringLength-1; i >= 0; i--){
          reversedString += string[i];
          console.log(string[i]);
      }