我在下面列出了一个问题和两个答案。答案背后的逻辑对我来说似乎是相同的,但是解决方案A可以工作,而解决方案B可以返回“ false”,除非“ x”是字符串的第一个字母。这是为什么?
问题:
编写一个名为hasX()的函数。它应将字符串作为输入,如果字符串包含字符“ x”,则应返回true,否则应返回false。
解决方案A:
function hasX(s) {
for (var i = 0; i < s.length; i++)
if (s[i] === 'x') {
return true;
} if (s[i] !== 'x') {
return false;
}
}
hasX('I play the xylophone');
// returns true
解决方案B:
function hasX(s) {
for (var i = 0; i < s.length; i++)
if (s[i] === 'x') {
return true;
} else {
return false;
}
}
hasX('I play the xylophone');
// returns false
此处的区别在于,在第一个示例中,您有两个 if
语句,而在第二个示例中,您有一个 if-else
语句。由于您的for
循环没有花括号,因此它仅包含其后的第一条语句,因此正确嵌套后,它们就像这样:
for
if
if
for
if-else
在第一个示例中,第二个示例if
将在循环完成后执行(如果已完成)。在第二个示例中,整个if-else
过程在循环的每次迭代中执行。
第一个循环进行迭代,直到找到具有该值的字符x
或到达数组的末尾为止,而第二个循环立即返回,因为第一个字符是x
或不是。
实际上,您不需要两个条件。您可以像这样正确编写函数:
function hasX(s) {
for (var i = 0; i < s.length; i++) {
if (s[i] === 'x') {
return true;
}
}
// didn't find an x
return false;
}
console.log(hasX('I play the xylophone'));
console.log(hasX('I play the piano'));
我建议始终在循环和if
语句的主体周围使用花括号。它有助于防止这样的偷偷摸摸的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句