如果if else还没有按预期工作

时间:2017-01-17 16:45:24

标签: javascript if-statement

我注意到如果我在elseif / else语句之上有多个if语句,那么最后一个if,else if和else似乎会创建自己的逻辑块,并且它忽略了第一个ifs:< / p>

http://jsbin.com/runudedaja/edit?js,console

var a = '';

for (i=1; i<6; i++) {
  if (i === 1) {
    a = 'first if';
    console.log(a + " " + i);
  }
  if (i === 2) {
    a = 'second if'
    console.log(a + " " + i);
  }
  if (i === 3) {
    a = 'third if';
    console.log(a + " " + i);
  }
  else if (i === 4) {
    a = 'else if';
    console.log(a + " " + i);
  }
  else {
    a = 'else';
    console.log(a + " " + i);
  }
}

如您所见,i===1i===2同时点击了他们的特定if声明和最后一个声明。但i===3else if (i===4)else都符合我的预期。

控制台日志

"first if 1"
"else 1"
"second if 2"
"else 2"
"third if 3"
"else if 4"
"else 5"

**期望输出**

"first if 1"
"second if 2"
"third if 3"
"else if 4"
"else 5"

这里发生了什么,我该如何解决?

6 个答案:

答案 0 :(得分:1)

描述

您错过了i === 2i === 3的{​​{1}}语句,因此如果下面添加了else if语句的语句部分,则会变为3。

三个if语句块:

第一次检查:

if (i === 1) {
    a = 'first if';
    console.log(a + " " + i);
}

第二次检查:

if (i === 2) {
    a = 'second if'
    console.log(a + " " + i);
}

第三项检查:

if (i === 3) {
    a = 'third if';
    console.log(a + " " + i);
}
else if (i === 4) {
    a = 'else if';
    console.log(a + " " + i);
}
else {
    a = 'else';
    console.log(a + " " + i);
}

这意味着当i等于1时,每个if块都会检查它,并且会击中第一个if块和第三个块的else。

您的代码已更改ifelse if

&#13;
&#13;
var a = '';

for (i=1; i<6; i++) {
  if (i === 1) {
    a = 'first if';
    console.log(a + " " + i);
  }
  else if (i === 2) {
    a = 'second if'
    console.log(a + " " + i);
  }
  else if (i === 3) {
    a = 'third if';
    console.log(a + " " + i);
  }
  else if (i === 4) {
    a = 'else if';
    console.log(a + " " + i);
  }
  else {
    a = 'else';
    console.log(a + " " + i);
  }
}
&#13;
&#13;
&#13;

您的代码已更改为Switch声明

&#13;
&#13;
var a = '';

for (i = 1; i < 6; i++) {
  switch (i) {
    case 1:
      a = 'first if';
      console.log(a + " " + i);
      break;
    case 2:
      a = 'second if'
      console.log(a + " " + i);
      break;
    case 3:
      a = 'third if';
      console.log(a + " " + i);
      break;
    case 4:
      a = 'else if';
      console.log(a + " " + i);
      break;
    default:
      a = 'else';
      console.log(a + " " + i);
      break;
  }
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您似乎错过了几个else个关键字。

您的此代码:

if (i === 1) {
    a = 'first if';
    console.log(a + " " + i);
  }
  if (i === 2) {
    a = 'second if'
    console.log(a + " " + i);
  }
  if (i === 3) {
    ...

应该是:

if (i === 1) {
    a = 'first if';
    console.log(a + " " + i);
  } else // <=== NEW "else"
  if (i === 2) {
    a = 'second if'
    console.log(a + " " + i);
  } else // <=== NEW "else"
  if (i === 3) {
    ...

答案 2 :(得分:0)

您有三个单独的检查:

1

if (i === 1) {
  a = 'first if';
  console.log(a + " " + i);
}

2

if (i === 2) {
  a = 'second if'
  console.log(a + " " + i);
}

3

if (i === 3) {
  a = 'third if';
  console.log(a + " " + i);
}
else if (i === 4) {
  a = 'else if';
  console.log(a + " " + i);
}
else {
  a = 'else';
  console.log(a + " " + i);
}

这意味着如果i12,那么它会在第三次检查中满足else

最简单的解决方案(尽管不是最干净的),是将第二个和第三个if变为else if。最干净的解决方案是使用switch

答案 3 :(得分:0)

在这种情况下,最好是转换:

import numpy as np
import timeit

def func_a(data):
    return np.apply_along_axis(lambda x: np.bincount(x, minlength=data.max()+1), axis=0, arr=data)

def func_b(data):
    data_max=data.max()+1
    return np.apply_along_axis(lambda x: np.bincount(x, minlength=data_max), axis=0, arr=data)

setup = '''import numpy as np
data=np.array([[1,2,5,4,8,7,8,9,14,8,14,5,2,1],
               [5,8,7,13,7,8,9,21,5,7,9,24,3,2]])
from __main__ import func_a, func_b'''

而不是这种生活和回归,你也可以简单地做一个=&#34;它的其他&#34;就像你的代码一样。此外,我会把console.log放在最后一个if,因为它非常重复。

答案 4 :(得分:0)

Else在那里没用,最后也是如此,顺便说一下你可能想用switch

if (i === 4) {
  a = 'else if';
  console.log(a + " " + i);
}

a = 'else';
console.log(a + " " + i);

答案 5 :(得分:0)

您已撰写了2个if - 语句和1个if / else-if / else声明:

1

    if (i === 1) {
      a = 'first if';
      console.log(a + " " + i);
    }

2。

    if (i === 2) {
      a = 'second if'
      console.log(a + " " + i);
    }

3。

    if (i === 3) {
      a = 'third if';
      console.log(a + " " + i);
    }
    else if (i === 4) {
      a = 'else if';
      console.log(a + " " + i);
    }
    else {
      a = 'else';
      console.log(a + " " + i);
    }

代码执行进入每个if语句,这意味着当i不是3时,所有迭代都会执行最终的else子句。