javascript - 为什么这个 javascript 变量输出“未定义”和正确的输出?
问题描述
我儿子开始学习 javascript,我也一直在尝试学习一些,以帮助他保持兴趣并回答他的问题。我有一点 C++ 经验,我正在玩弄该语言并尝试编写下面的 javascript,只是看到它不断输出“未定义”,无论正确答案是什么。我真的很感激有人为我阐明了这件事。谢谢。
var word = prompt("Enter some text");
var reversedWord = reverseString(word);
alert(reversedWord);
function reverseString(text)
{
var reversedText = "";
var length = text.length;
for(var i = length; i >= 0; i--)
{
reversedText += text[i];
}
return reversedText;
}
解决方案
Javascript 使用关键字“未定义”来表示“空”。
在上述代码中观察到的问题通常称为“数组索引超出范围”错误。
发生这种情况是因为尝试从不存在的位置访问数组中的元素。
在 n 个元素的数组中,位置编号从 0 到 n-1
IE,从 0 到(长度 - 1)。
因此,在对数组编写 for 循环时,必须确保仅对从 0 到 (length - 1) 的位置进行引用。
上述代码中的问题可以通过更新 for 循环以仅在 (length - 1) 和 0 之间循环来解决。
这是不显示“未定义”的更新代码:
function reverseString(text) {
var reversedText = "";
var length = text.length;
for(var i = (length -1); i >= 0; i--) {
reversedText += text[i];
}
return reversedText;
}
推荐阅读
- c# - ASP.NET Core 2:在这种情况下,“多对一”关系背后的代码是什么?
- angular - 使用 ng2-pdf-viewer 或更优化的方式从 PDF 中读取文本?
- angular - 自定义组件值未使用 Angular Reactive Form 更新
- javascript - 用 puppeteer 创建的 PDF 不显示字体真棒图标
- java - eclipse 中的线程“restartedMain”异常
- php - 如何使用 laravel-echo-server 在 laravel 广播中通过私有通道接收套接字
- sql - 获取其他“对象/记录”作为另一个“列/属性”的属性
- python - 在没有互联网连接的 windows server 2016 中安装 python 包
- javascript - 为什么两个 JS 对象实例化的日期不同?
- java - Java - 从数据库中获取用户名