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

Mar*_*eca 4 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');
  }
}
Run Code Online (Sandbox Code Playgroud)

第二个代码:

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');
  }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 8

2 <= N <= 5为例,以下两个回真:

2 <= 3 <= 5
2 <= 6 <= 5
Run Code Online (Sandbox Code Playgroud)

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

true <= 5
true <= 5
Run Code Online (Sandbox Code Playgroud)

真的评价为:

1 <= 5
1 <= 5
Run Code Online (Sandbox Code Playgroud)

两者都是真的.因此,在第二个示例中,您会得到一个错误的标志,即使您希望它在逻辑上是错误的.

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