关于isPalindrome函数中第二个条件判断执行逻辑的疑问
关于isPalindrome函数第二个条件判断的疑问解答
1. 当字符串长度为2且两个字符不同时会怎样?
直接返回false。比如输入'cg',str[0] === str[1]的结果是false,return语句会把这个布尔值作为函数的返回值。
2. return str[0] === str[1]的比较执行逻辑
先通过str[0]和str[1]分别取出字符串的第一个和第二个字符,再用**严格相等运算符===**做比较:
- 如果两个字符内容完全相同(因为都是字符串类型,不用考虑类型差异),比较结果为
true; - 否则结果为
false;
最后return会把这个比较得到的布尔值直接返回给函数调用者。
3. 是否必须把比较放在if语句内?
完全没必要。if语句在这里只是用来判断当前字符串长度是否为2,当条件成立时才执行这条return语句。你可以把比较逻辑拆出来写,比如:
else if (str.length === 2) { const isEqual = str[0] === str[1]; return isEqual; }
只要逻辑正确,怎么写都可以,核心是当长度为2时,返回两个字符是否相等的判断结果。
4. 这行代码在if作用域外时,会返回true或false吗?
会的。str[0] === str[1]本身就是一个布尔表达式,不管它在不在if语句里,执行后都会得到true或false。但要注意,如果把return str[0] === str[1]放到if外面,比如不管字符串长度是多少都执行这行,逻辑就错了——比如长度为3的字符串,这样比较就不符合回文的判断规则了,所以只有在判断长度为2的情况下执行这行,才是合理的。
原函数代码:
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 }
内容的提问来源于stack exchange,提问作者Akhror Khamidov
相关产品推荐
相关产品推荐

