我确实理解以下功能的工作原理。但是为什么它不会在第一次迭代后退出(当有回文时)?它在if语句中检查第一个字符与最后一个字符,这是真的,应该(在我的逻辑中)执行return语句...感谢您解释这个的任何帮助! :)
function palindrome(str) {
var lowerCaseStr = str.toLowerCase();
for (var i = 0; i < lowerCaseStr.length; i++)
debugger;
if (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]){
return true;
}
return false;
}
答案 0 :(得分:2)
它不会在第一次迭代后但在lowerCaseStr.length
次迭代后退出,因为您的代码等同于下面的代码
function palindrome(str) {
var lowerCaseStr = str.toLowerCase();
for (var i = 0; i < lowerCaseStr.length; i++){
debugger;
}
if (lowerCaseStr[lowerCaseStr.length] === lowerCaseStr[-1]){
return true;
}
return false;
}
也就是说,它迭代lowerCaseStr.length;
次,但它为每个迭代做的唯一事情就是调用debugger
之后它会测试数组中不存在的元素。 (两个指数都超出界限)。这导致两次undefined
undefined === undefined
的比较,这总是正确的。
作为副节点,如果根据布尔表达式返回true或false,则考虑使用一个return语句:
return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]);
答案 1 :(得分:0)
您需要切换逻辑,检查不等式并返回false
。如果到达目的地,请返回true
。
function palindrome(str) {
var lowerCaseStr = str.toLowerCase();
for (var i = 0; i < lowerCaseStr.length; i++) {
debugger;
if (lowerCaseStr[i] !== lowerCaseStr[lowerCaseStr.length - i - 1]) {
return false;
}
}
return true;
}