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

时间:2016-10-15 03:05:21

标签: javascript loops if-statement

我在下面列出了一个问题和两个答案。答案背后的逻辑似乎与我相同,但解决方案A有效,而解决方案B返回'false',除非'x'是字符串的第一个字母。那是为什么?

问题:

编写一个名为hasX()的函数。它应该作为输入一个字符串,如果字符串包含字符'x',它应该返回true,如果不包含字符'x'则返回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

5 个答案:

答案 0 :(得分:3)

这里的区别在于,在第一个示例中,您有两个 if语句,而在第二个示例中,您有一个 if-else语句。由于您的for循环没有任何大括号,因此它只包含第一个语句,因此正确嵌套后,它们就像这样:

for
    if

if


for
    if-else

在第一个示例中,第二个if将在循环完成后执行,如果完成的话。在第二个示例中,整个if-else在循环的每次迭代中执行。

第一个循环迭代,直到找到值为x的字符或到达数组的末尾,而第二个循环立即返回,因为第一个字符是x或者它不是&# 39;吨

实际上,您不需要两个条件。你可以正确编写你的函数:

&#13;
&#13;
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'));
&#13;
&#13;
&#13;

我建议总是在循环体和if语句周围使用大括号。它有助于防止像这样的偷偷摸摸的错误。

答案 1 :(得分:1)

在你的情况下,两者之间在逻辑上没有区别,如果&#34;或&#34; if / else&#34;声明。 这个例子将告诉你一般的区别: 例1:

function name{
if(condition 1){ //Task1; }
if(condition 2){ //Task2; }
}

在此示例中,如果两个条件都为真,则除非循环返回一个值(停止执行其他代码),否则代码将贯穿两个循环。

示例2:

function name{
if(condition1){ //Task1; } //loop1
else{ //Task 2; }         //loop2
}

在这个例子中,代码将运行loop1(如果&#34; condition1&#34;为真)或循环2(否则),所以你的代码只运行其中一个循环。

答案 2 :(得分:0)

如果-ELSEIF:

start;
if() \\true
break;
end;

IF = FALSE - 转到ELSE-IF。如果为TRUE - 中断。

如果-IF:

start;
if() \\true
if()
end;

执行2 IF&#39>。

答案 3 :(得分:0)

这与效率和需求有关。如果陈述是彼此独立执行的。每个人都会跑。否则if语句仅在前一个if失败时才执行。 :)

答案 4 :(得分:-1)

这两个函数都会返回false,因为它们都会测试第一个字符并返回。

您要做的只是在角色为==&#39; x&#39;时才返回true。如果不是,你也不想回来。您需要允许循环继续并检查下一个字符。

只有在您检查了所有字符并且您的循环结束后,您才知道该字符串没有&#39; x&#39;,所以只有这样才能返回false。