【问题标题】:Javascript multiple OR in statement [duplicate]语句中的Javascript多个OR [重复]
【发布时间】:2021-05-13 13:49:36
【问题描述】:

我有一个非常基本的声明,它没有输出正确的值,但我不明白为什么。

我的变量具有以下值:

var bedroomNums = "0_1"

但此输出在 Chrome 控制台中显示为 true

bedroomNums != ("0_0" || "0_1" || "0_2")

我正在尝试创建一个IF 声明来表示:

if bedroomNums doesnt equal X or Y or Z then the statement is true

我试过了:

bedroomNums != "0_0" || bedroomNums != "0_1" || bedroomNums != "0_2"

但这也显示为真

我哪里错了

【问题讨论】:

  • 我认为您似乎真正在寻找的不是一个合乎逻辑的OR,而是一个合乎逻辑的AND(满足每个条件)。
  • bedroomNums 不能同时是三个不同的值。如果它等于“0_0”,那么它必然不会等于“0_1”,因此这些条件中的至少两个必须是是的。
  • bedroomNums != "0_0" && bedroomNums != "0_1" && bedroomNums != "0_2"
  • 这不是您要执行的操作的正确语法。每个表达式都需要比较bedroomNum(即( bedroomNums != "0_0" && bedroomNums != "0_1" && bedroomNums != "0_2")
  • @AnthonyBroadbent 您在评论中提供的内容在技术上是有效的 ECMAScript 语法,但不会像您认为的那样工作。字符串值是“truthy”,所以"0_0" && "0_1" && "0_2" 实际上是true && true && true。根据bedroomNums 的类型和值,这种比较可能不会返回您期望或需要的结果。

标签: javascript


【解决方案1】:

您实际上正在寻找的是logical AND,它将确保满足每个条件:

if (bedroomNums != "0_0" && bedroomNums != "0_1" && bedroomNums != "0_2") {
    // `bedroomNums` is not one of "0_0", "0_1", "0_2"
}

如果其中一项检查返回 FALSE(即,bedroomNums 设置为这些值之一),则不会执行大括号内的代码。


表达相同条件的另一种方法是将您要比较的每个值枚举到一个数组结构中,然后使用@987654322检查以确保bedroomNums的值不存在于所述数组中@:

if (!["0_0", "0_1", "0_2"].includes(bedroomNums)) {
    // `bedroomNums` is not one of "0_0", "0_1", "0_2"
}

这种样式通常在您的程序必须动态枚举条件的所有可能值的情况下(基于某些其他逻辑或数据源)更有帮助。

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2017-01-08
    相关资源
    最近更新 更多