Javascript 为什么我没有定义?(JS)

Javascript 为什么我没有定义?(JS),javascript,undefined,palindrome,Javascript,Undefined,Palindrome,我写代码是为了知道一个单词是否是回文。我认为我的代码是正确的,但我在“newStr”上没有定义。就像控制台告诉我的那样:console.log(newStr)//undefinedracerar 我不明白为什么,我打赌为什么我的报税表会显示“false”,因为我认为代码是正确的。下面是我的代码。谢谢 函数回文(str){ //console.log(str); str=str.split(“”).join(“”.toLowerCase(); //console.log(str); //cons

我写代码是为了知道一个单词是否是回文。我认为我的代码是正确的,但我在“newStr”上没有定义。就像控制台告诉我的那样:console.log(newStr)//undefinedracerar 我不明白为什么,我打赌为什么我的报税表会显示“false”,因为我认为代码是正确的。下面是我的代码。谢谢

函数回文(str){
//console.log(str);
str=str.split(“”).join(“”.toLowerCase();
//console.log(str);
//console.log(str.length);
let newStr=“”;
对于(设i=str.length;i>=0;i--){
newStr=newStr+str[i];
}
console.log(newStr);
如果(str==newStr){
返回true;
}否则返回false;
}

log(回文(“rarecar”)
let i=str.length
应该是
let i=str.length-1


这是
str[str.length]
不是
str
的索引,它比
str
的最后一个索引高一个,因为索引从0开始。

正如其他人所指出的,您的代码长度被缩短了一倍,可以通过更改循环不变量的初始值来固定

但我想指出,有一个更简单的方法来解决这个问题。您可以简单地反转拆分字符串时得到的数组。这首先避免了许多此类问题的发生,并导致代码更简单

函数回文(str){
return str===str.split(“”).reverse().join(“”);
}
console.log(回文(“赛车”);//返回true

console.log(回文(“rarecar”);//返回false
如果请求长度为10的数组的
a[10]
(请记住,长度为10的数组将包含从
a[0]
a[9]
的元素),会发生什么情况?