为什么代码似乎有效,但结果中也包含未定义
Why does the code seem to work yet also include undefined in the result?
我下面的代码来自一个 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++){
或:
for(i=0;i<str.length;i++){
你看到undefined
的原因是,当循环命中它的最终迭代时,i
的值等于字符串的长度,所以当它寻找str[i]
时,它找不到它,因此附加了未定义。
最后一个元素的索引实际上是长度减去 1,因为索引从零开始。 因此,在 for 循环中,您可以添加 -1
部分以避免这种情况,或者只使用 <
而不是 <=
。
当i
等于字符串的长度(最后一次命中i<=str.length
时),则str[i]
undefined
,因此它命中else分支并revised+=theChar
undefined
转换为字符串并附加它。
你想要< str.length
,而不是<=
。
你迭代了太多次。更改为:
for(i=0;i<str.length;i++)
当你有i<=str.length
这意味着你必须迭代,只要我将是字符串长度的 euqal。当我从 0 开始时,完成值将是最后一个字母 + 1 的位置。
上次迭代 ( str[i]
) 在此平台中没有任何值。
相关文章:
- 包含插入的Meteor方法没有返回记录ID作为结果
- jQuery 在结果中包含创建的子项
- 不要在顺序链式承诺中包含 q 承诺结果
- 如何在element.select的结果中包含当前元素
- 如何在php JSON编码结果中包含谷歌分析
- 如何在字符之间进行匹配,但不将它们包含在结果中
- 如何在PHP中包含动态Javascript页面的静态HTML结果
- Meteor.js HTTP.get 获取 JSON 引号并解析结果似乎包含一个回调函数
- Select2 以编程方式设置搜索词并打开包含相关结果的下拉列表(无 ajax 调用)
- 从包含的 php 文件刷新查询结果
- 为什么代码似乎有效,但结果中也包含未定义
- 键控包含用于阻止结果的筛选
- 打开对话框,其中包含在使用 magnificPopup 构建的弹出窗口中跟随 URL 返回的结果
- 如何将一个结果列表合并到一个包含汇总的压缩对象中
- 输出一个结果数组,其中包含给定数组的唯一元素的分组计数
- 使用Rally SDK 1.33创建一个包含两个findall调用结果的表
- javascript foreach返回包含名称的结果
- 返回包含所有可能的括号组合和每个括号组合的结果的等式
- 为什么结果包含多个具有相同值的副本
- 如果结果包含键,如何停止ajax计时器