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