Javascript 为什么代码似乎可以工作,但结果中也包含未定义的内容?

Javascript 为什么代码似乎可以工作,但结果中也包含未定义的内容?,javascript,undefined,Javascript,Undefined,下面的代码来自coderbyte.com的挑战。我是初学者,所以欢迎所有建设性的批评。我知道我可以用它。挑战要求获取一个字符串,并用字母表中紧跟其后的字母替换字符串中的每个字母,即c变为d,z变为a。然后将新字符串a、e、i、o、u中的每个元音大写,最后返回修改后的字符串。下面的代码应该修改我在本例中提供的字符串-Hello World!但我不明白为什么会显示正确的代码,然后显示“未定义”。有人能解释一下吗 Ifmmp xpsmE!undefined 代码如下: var str = "Hell

下面的代码来自coderbyte.com的挑战。我是初学者,所以欢迎所有建设性的批评。我知道我可以用它。挑战要求获取一个字符串,并用字母表中紧跟其后的字母替换字符串中的每个字母,即c变为d,z变为a。然后将新字符串a、e、i、o、u中的每个元音大写,最后返回修改后的字符串。下面的代码应该修改我在本例中提供的字符串-Hello World!但我不明白为什么会显示正确的代码,然后显示“未定义”。有人能解释一下吗

Ifmmp xpsmE!undefined
代码如下:

var str = "Hello World!";
console.log(change_letter(str));

function change_letter(str){
  var revised="";
  for(i=0;i<=str.length;i++){
    var theChar = str[i];
    if((theChar>='a' && theChar<'z') ||
       (theChar>='A' && theChar<'Z')){
      var charCode = str.charCodeAt(i);
      var newCharCode = charCode+1;
      var newLetter = String.fromCharCode(newCharCode).toLowerCase();
      if (newLetter==='a' || newLetter === 'e' 
            || newLetter === 'i' || newLetter === 'o' 
            || newLetter === 'u'){
        newLetter = newLetter.toUpperCase();
      }
      revised+=newLetter;
    }
    else if(theChar==='z' || theChar==='Z'){
      revised+='a';
    }
    else revised+=theChar;
  }
  return revised;
}

您忘记了str.length属性实际上比长度多1,因为数组从索引0开始。尝试将循环更改为:

for(i=0;i<=str.length-1;i++){
或:

您看到未定义的原因是,当循环到达其最终迭代时,i的值等于字符串的长度,因此当它查找str[i]时,它不会;找不到它,因此添加了未定义的


最后一个元素的索引实际上是长度减1,因为索引从零开始。因此,在for循环中,添加-1部分以避免出现这种情况,或者仅使用您忘记了str.length属性实际上将比长度多1,因为数组从索引0开始。尝试将循环更改为:

for(i=0;i<=str.length-1;i++){
或:

您看到未定义的原因是,当循环到达其最终迭代时,i的值等于字符串的长度,因此当它查找str[i]时,它不会;找不到它,因此添加了未定义的


最后一个元素的索引实际上是长度减1,因为索引从零开始。因此,在for循环中,您添加了-1部分以避免出现这种情况,或者仅当i等于上次命中的字符串长度时才使用,当i等于上次命中的字符串长度时才使用,因为迭代次数太多。更改为:

for(i=0;i<str.length;i++)

当你有我你重复它太多次了。更改为:

for(i=0;i<str.length;i++)

当您有iHint时:检查for循环中的条件。另外,您可能希望测试一个带有z的输入字符串。额外提示:初始化函数VARI、REVIDED、theChar、。。。等在这种情况下,您忘记初始化VARI,否则很难跟踪哪些变量已经或没有将var放在它们旁边。提示:检查for循环中的条件。另外,您可能希望测试一个带有z的输入字符串。额外提示:初始化函数VARI、REVIDED、theChar、。。。等在这种情况下,您忘记了初始化VARI,否则很难跟踪您有或没有将var放在它们旁边。