这(6 <= N <= 20)和这(N >= 6 && N <=20)的区别是什么?

4
我的问题是:为什么第一段代码表现不佳,但第二段完美运行?
第一段代码:

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');
  }
}


在第一个代码块中,您正在评估条件的结果(因此为真或假,0或1),而不是将其与下一个条件语句中的N进行比较。 - Derek Pollard
另外,return n % 2 === 0; 将会返回一个布尔值,告诉你这个数字是偶数还是奇数。 - Derek Pollard
1个回答

8
以“2 <= N <= 5”为例,以下两种情况都返回true:
2 <= 3 <= 5
2 <= 6 <= 5

根据实际情况,左侧的第一个不等式会首先被计算,这对于两种情况都是正确的。然后会发生以下情况:

true <= 5
true <= 5

实际上会被评估为:

1 <= 5
1 <= 5

这两个条件都是正确的。因此,在第二个例子中,您会得到一个错误的标志为true,即使您本意是逻辑上的false。

实际上,您的第二个代码片段是在JavaScript和大多数其他语言中编写不等式的方式。


完美的答案,特别是对于解释JS执行最终条件时所做的类型转换。+1 - Derek Pollard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接