为何这段JavaScript字符串反转代码输出含'Undeclared'?
问题分析与修复
Let's walk through what's going wrong with your string reversal function and fix it up:
主要问题点
- 未初始化
rev变量:你在循环里直接使用rev但没有先给它赋值,JavaScript会把未初始化的变量视为undefined。第一次执行str[i] + rev时,就会变成str[0] + "undefined",这就是输出里出现undefined(你看到的Undeclared应该是输入笔误)的原因。 - 循环条件越界:字符串的索引是从
0到length-1的,你的循环条件是i <= len,当i等于len时,str[i]会是undefined,又会多拼接一次这个字符串,导致输出末尾再出现一次undefined。 - 循环内重复声明变量:每次循环都用
var rev声明变量,虽然var的变量提升不会直接报错,但这是不必要的写法,容易造成混淆。
修复后的代码
如果你想保持从前往后拼接的逻辑(把每个字符加到结果的前面),可以改成这样:
function Reverse(str) { var len = str.length; var rev = ""; // 先初始化空字符串 for(var i = 0; i < len; i++) { // 循环条件改为i < len,避免越界 rev = str[i] + rev; } alert(rev); } Reverse('Canyon');
或者更高效的方式是从字符串末尾往前遍历,直接拼接到结果后面:
function Reverse(str) { var len = str.length; var rev = ""; for(var i = len - 1; i >= 0; i--) { rev += str[i]; } alert(rev); } Reverse('Canyon');
运行这两个版本的代码,都会弹出正确的反转结果"nynoC"。
内容的提问来源于stack exchange,提问作者Shah Quadri
相关产品推荐
相关产品推荐

