我理解第三个条件,但不理解第二个
关于第二条件-如果";str";为2(意味着它有2个字符(,则返回"0";str[0]==str[1]";但是如果最后两个字符不同呢;c"g";大概
return str[0] === str[1]
中的比较是如何执行的?因为if((语句返回true,所以比较必须在if((函数内部吗?
但是,这行return str[0] === str[1]
在if((语句的范围之外,返回true或false
function isPalindrome(str) {
// 1st Conditional
if (str.length === 1) return true
// 2nd Conditional
else if (str.length===2) return str[0]===str[1]
// 3rd Conditional
else if (str[0] === str.slice(-1)) {
return isPalindrome(str.slice(1,-1))
}
return false
}
return "str[0] === str[1]"
,但如果最后两个字符不同呢"c"g";大概
此语句将返回一个布尔值。该布尔值由str[0] === str[1]
确定。这是一个错误或正确的比较。在示例";cg";,该比较将计算为false,因此return
语句将使函数返回值false
。
return str[0] === str[1]
中的比较是如何执行的?
它像在任何其他上下文中一样执行。表达式为str[0] === str[1]
,该求值的结果由return
语句返回。
因为
if()
语句返回true,所以比较必须在if()
语句内部吗?
return
应仅在前一个if
语句为true时执行,即return
应仅在字符串长度为true时才执行。
但是,这行
return str[0] === str[1]
在if()
语句的范围之外,返回true或false
该语句不在if
语句的范围之外。它是一个仅在if
条件为true时执行的语句。
如果有帮助的话,我们可以将if (str.length===2) return str[0]===str[1]
重写如下:
if (str.length===2) {
let isPalindromeOfTwo = str[0]===str[1];
return isPalindromeOfTwo;
}
甚至(但这是一个反模式(:
if (str.length===2) {
if (str[0]===str[1]) {
return true; // It is a palindrome of 2
} else {
return false; // Not a palindrome
}
}
只要意识到一个比较代表一个值:一个布尔值。此值可以在任何需要值的上下文中使用。例如,您可以执行以下任何操作:
console.log(str[0]===str[1]); // output will be "false" or "true"
let x = str[0]===str[1]; // x will be a boolean value: false or true
let y = Number(str[0]===str[1]); // y will be a number, 0 or 1