这个(6 <= N <= 20)和这个(N> = 6 && N <= 20)之间的差?

时间:2018-06-20 14:08:49

标签: javascript

我的问题是:为什么第一个代码不能很好地工作,而第二个代码却可以完美地工作?

第一个代码:

function oddOrEven(N) {
  if (N % 2 == 1) {
    console.log('Weird');
  } else if (2 <= N <= 5) {
    console.log('Not Weird');
  } else if (6 <= N <= 20) {
    console.log('Weird');
  } else if (N > 20) {
    console.log('Not Weird');
  }
}

第二个代码:

function oddOrEven(N) {
  if (N % 2 == 1) {
    console.log('Weird');
  } else if (N >= 2 && N <= 5) {
    console.log('Not Weird');
  } else if (N >= 6 && N <= 20) {
    console.log('Weird');
  } else if (N > 20) {
    console.log('Not Weird');
  }
}

1 个答案:

答案 0 :(得分:8)

2 <= N <= 5为例,以下两个都返回true:

2 <= 3 <= 5
2 <= 6 <= 5

根据经验,似乎首先评估了左边的第一个不等式,在两种情况下都是如此。然后发生以下情况:

true <= 5
true <= 5

其实际评估为:

1 <= 5
1 <= 5

两者都是正确的。因此,在第二个示例中,即使您希望逻辑上为假,您也会得到一个假标志true。

在实践中,第二个代码段是如何用JavaScript和大多数其他语言编写这样的不等式。