两个'if'语句和一个'if / else'循环之间的区别

mkhira2

我在下面列出了一个问题和两个答案。答案背后的逻辑对我来说似乎是相同的,但是解决方案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
JLRishe

此处的区别在于,在第一个示例中,您有两个 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章