Javascript 为什么我的代码总是以未定义结尾?
我写了这个JavaScript代码,但它总是以**未定义**mycode结尾?我做错了什么/我如何防止将来发生这种情况。我正在通过chrome javascript控制台运行代码 这是我的密码Javascript 为什么我的代码总是以未定义结尾?,javascript,undefined,Javascript,Undefined,我写了这个JavaScript代码,但它总是以**未定义**mycode结尾?我做错了什么/我如何防止将来发生这种情况。我正在通过chrome javascript控制台运行代码 这是我的密码 //Reverse a string //-------------------------// //Input a string var string = prompt("Please enter string"); //console.log(string); //
//Reverse a string
//-------------------------//
//Input a string
var string = prompt("Please enter string");
//console.log(string);
//Find length of string
var stringLength = string.length;
//console.log(stringLength);
//Creating an empty string for outputting answer
var reversedString = "";
//Start from length of the string and work backwards, inputting letter 1 at a time.
for (var i = stringLength; i >= 0; i--){
reversedString += string[i];
//console.log(string[i]);
}
//Outputting the reversed string;
alert(reversedString);
感谢您提前给出任何答案从
for (var i = stringLength; i >= 0; i--){
到
问题是,javascript中的数组索引是基于0的
假设在提示中输入的字符串是“abc”,字符串的长度是3。在循环中,您可以作为未定义的string[3]
访问它。因此出现了错误
下面是演示更新代码的小提琴:
- 您不应该执行string[i]而应该执行string.charAt(i);同时将stringLength更改为stringLength-1。这会解决你的问题。如果您想在不同的浏览器中使用字符表示法。Javascript数组从0开始,而不是从1开始,这就是为什么要使用length-1来获取最后一个元素。例如:
对于10个元素的数组,索引为0-9。10位于阵列的边界之外
for (var i = (stringLength - 1); i >= 0; i--){
reversedString += string.charAt(i);
这是正确答案。添加字符串[i]是此代码在提醒您之前所做的最后一件事,因此最后一个字符串[i],(我假设数组中的第一个元素)的值为undefined
for (var i = stringLength; i >= 0; i--){
reversedString += string[i];
//console.log(string[i]);
}
我不知道为什么会这样,但我知道坚持惯例总是一个好主意,循环的一个办法是:
for(var i = 0; i < [length variable];i++) {
...
}
for(变量i=0;i<[长度变量];i++){
...
}
右侧代码
for (var i = stringLength-1; i >= 0; i--){
reversedString += string[i];
console.log(string[i]);
}
什么是未定义的?代码本身不能是未定义的。如果输入hello,则输出为未定义的dolleh。因此,代码正常工作,但单词undefined会自动放在它前面YOh,您指的是
alert()
中显示的字符串,而不是控制台中的结果。请回答您的问题以使问题更清楚。感谢所有回答。我第一次在这里问了一个问题,我对快速的回答感到惊讶。所有的答案都是我一直在寻找的,我希望我能很快进步到一个我不会经常犯这些错误的阶段。为什么?对于初学者来说,一个解释肯定会更有帮助。因为根据所有数组的定义,a[a.length]是未定义的。不,这不是问题所在。编辑:问题在于循环变量,而不是括号符号。缺少charAt
将导致代码在Internet Explorer上中断。这是好是坏取决于你的良心。如果你想让它在不同浏览器间运行,请使用charAt not[]这将是@Felix Klingb的问题,但这不是op面临的问题,而你最初声称是。我正在帮助他解决未来可能面临的问题。我还告诉他他问的问题……那么你的问题是什么?
for (var i = stringLength-1; i >= 0; i--){
reversedString += string[i];
console.log(string[i]);
}