为什么这个函数在第一次迭代后不退出?
Why doesn't this function exit after the first iteration?
我确实理解以下函数的一般工作原理。但是为什么它在第一次迭代后不退出(当有回文时)?它检查 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;
}
您需要切换逻辑,检查不等式和return false
。如果到达终点,return 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;
}
它不会在第一次迭代后退出,而是在 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
总是正确的。
作为侧节点,如果您 return 根据布尔表达式为真或假,则考虑使用一个 return 语句:
return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]);
我确实理解以下函数的一般工作原理。但是为什么它在第一次迭代后不退出(当有回文时)?它检查 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;
}
您需要切换逻辑,检查不等式和return false
。如果到达终点,return 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;
}
它不会在第一次迭代后退出,而是在 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
总是正确的。
作为侧节点,如果您 return 根据布尔表达式为真或假,则考虑使用一个 return 语句:
return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]);