Javascript 中的多个不同条件

Multiple and different conditions in Javascript

我逻辑有问题。 如果数字 大于 0 小于 10 数字为 11number is 22 做某事。 (1、2、3、4、5、6、7、8、9、11 或 22)。

如果数字 大于 10 不是 11 或者 不是 22,做点别的。 (10, 12, 13 ....20, 21, 23, 24...)

我只需要处理 11,但我不知道如何使用 22 插入另一个条件。

if (n >= 0 && n < 10) || (n == 11 && n == 22) {
        do something

    } else if (n >= 10 && n != 11) && (n != 22) {
        do something else
    }

你的第一个条件永远不会成功,因为你不能有一个大于 0 且小于 10 的数字并且这个相同的数字等于 11 并且也等于 22(在这两种情况下,它会更多超过 10).

if ((n > 0 && n < 10) || n == 11 || n == 22) {
    // my number is 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 or 22
} else {
    // my number is almost everything except the values from above
}

根据您的 (1, 2, 3, 4, 5, 6, 7, 8, 9, 11 或 22) 示例,这听起来像是您想要的?

if ((n > 0 && n < 10) || n == 11 || n == 22) {
  // do something
} else if (n >= 10) {
  // do something else
}

编辑:添加了我忽略的 else if (n >= 10)

看看文档,别搞混了logicial AND (&&) and logical OR(||).

function check(n) {
  if((n >= 1 && n <= 9) || (n == 11 || n == 22)) {
    console.log(n, true);
  } else if(n >= 10) {
    console.log(n, false);
  }
}

check(1)  // true
check(11) // true
check(22) // true
check(0)
check(10) // false
check(12) // false
check(21) // false
check(23) // false

只做比较,因为higher precedence of logical AND && over logical OR ||,不需要括号。

if (n >= 0 && n < 10 || n === 11 || n === 22) {
    // 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 or 22
    // do something
} else {
    // 10, 12, 13 ... 21, 23 ...
    // do something
}

尝试(n >= 1 && n <= 9) || n == 11 || n == 22,这将检查数字是否在 1 到 9 之间(包括 1 到 9)OR 它是11 OR 22.

然后,在您的 else if 中,只需检查 >= 10 - 小于 1 的数字,例如0,也不会触发else。

if ((n >=1 0 && n <= 9) || n == 11 || n == 22) {
    do something
} else if (n >= 10) {
    do something else
}

使用 >= 和 <= 可以更清楚地了解您要查找的值,否则需要一些额外的心理负担才能意识到 n > 0 && n < 10 真正意味着值 1 到 9。

此外,它是 JavaScript 并且数字可以是整数或浮点数,因此大于零可以是 0.1 等。

在你的 if 语句中,你说:

n 大于或等于 0 且 n 小于 10 要么 n 等于 11 且 n 等于 22

这意味着,对于 0 到 9(含)之间的数字或 11 和 22 之间的数字,if 块将 运行。因此数字可以在 0 到 9 之间,也可以是11 和 22 都是不可能的。

我对 if 语句的看法:

if (n >= 1 && n <= 9 || n == 11 || n == 22) {
    do something;
}

这样,您就不会混淆包含编号和排除编号,并确保允许使用 11 或 22。

第二个块将 运行 用于大于或等于 10 且不等于 11 且不等于 22 的数字。这很好。

else if (n >= 10 && n != 11 && n != 22) {
    do something else;
}

在这个答案中,我假设您不想完全跳过 10。如果您这样做,那么在第二个语句中,您将检查 n > 10.

从逻辑上讲,这是合理的。但是,我认为您不需要在第二个中检查 11 和 22,因为 if 块将首先 运行 如果数字是 11 或 22,第一个 if 块将 运行.所以第二个不需要考虑它们。

你快到了。

要测试 1、2、3、4、5、6、7、8、9、11 或 22:

if (n >= 0 && n < 10) || (n == 11 && n == 22) {

至少可以更改为:

if ((n > 0 && n < 10) || (n == 11 || n == 22)) {

三个重要的变化是:

  • 平衡括号以构建适当的 if( ) 结构。
  • >= 0 变为 > 0 以达到 高于零 的要求。
  • 最后的&&变为||

这也改变了运算顺序,因此在这种情况下我们实际上根本不需要任何额外的括号。这也恰好是正确的,而且更简单:

if (n > 0 && n < 10 || n == 11 || n == 22) {

...因为 && 的优先级高于 || 并且比较器(><==)的优先级高于条件(&&||)。

此时您不需要 else if 条件。只需 else 就足够了。 1122if 的肯定情况处理,因此 n 不会是 else 情况下的任何一个。

最终产品:

if (n > 0 && n < 10 || n == 11 || n == 22) {
  // 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 or 22
} else {
  // Something else.  :)
}