【问题标题】:Can't make multiple if conditions in JavaScript?不能在 JavaScript 中创建多个 if 条件?
【发布时间】:2011-07-18 08:19:10
【问题描述】:

我完全不知道为什么这不起作用。对我来说毫无意义。

这会返回一个“语法错误:解析错误”:

if ($(this).attr("id") === 'search' || opening = true) return false;

为了更好地衡量,我还尝试了以下方法,得到了相同的结果:

if (1 = 1 && 2 = 2) { return false; }

【问题讨论】:

  • 还有代码吗?因为在这里它没有做错任何事情,除了分配开放。
  • @Igois:为什么需要更多代码?您可以很清楚地看到,这里的问题是使用单个等号来确定语句中的相等性。

标签: javascript if-statement


【解决方案1】:

有三种不同的运算符在起作用:

  • =:作业
  • ==:平等
  • ===: 严格平等

= 实际上修改了一个变量,所以你不应该在if 语句中使用它。也就是说,您应该使用... || opening == true) 而不是... || opening = true)

【讨论】:

  • 请注意,在 if 条件中使用 = 是(通常认为)不好的做法,但仍然是完全有效的 JS。问题中的代码给出错误的原因是因为运算符优先级导致表达式被评估为($(this).attr("id") === 'search' || opening) = true,当然第一部分($(this).attr("id") === 'search' || opening) 不是变量,因此不能赋值。
【解决方案2】:

在 JavaScript 中,= 用于赋值,而===== 用于比较它们。

当您在 if 语句中输入 opening = true 时,您不是在检查 opening 是否为 true,而是将 opening 设置为 true。尝试改用==

例如,

var x = 5;
if (x == 10) {
    alert("x is 10");
} else {
    alert("x isn't 10");
}

将显示“x 不是 10”,而

var x = 5;
if (x = 10) {
    alert("x is 10");
} else {
    alert("x isn't 10");
}

将显示“x 为 10”。

【讨论】:

  • 第二个是错误的,因为你不能给1赋值,因为它不是一个有效的变量名。 2 也一样。
【解决方案3】:

第一个例子应该是:

if ($(this).attr("id") === 'search' || opening == true) return false;

第二个:

if (1 == 1 && 2 == 2) { return false; }

请注意,逻辑等号的双等号 (==) 与处理变量赋值的单等号 (=) 不同。

【讨论】:

    【解决方案4】:

    你的情况有误

    if ($(this).attr("id") === 'search' || opening = true) return false;
    

    应该是

    if ($(this).attr("id") === 'search' || opening == true) return false;
    

    问题在于等号

    === 不同

    第一个是赋值运算符。第二个是为了比较

    【讨论】:

      【解决方案5】:

      当你这样测试时:

      opening=true;
      

      您真正要做的是将opening 设置为true 的值。请改用==

      最后,操作顺序即使正确,也会让人感到困惑。在比较的每个部分加上括号。

      if (($(this).attr("id") === 'search') || (opening == true)) return false;
      

      【讨论】:

        【解决方案6】:

        我的猜测是 === 不存在。 == 用于测试相等性

        所以if ($(this).attr("id") === 'search' || opening == true) return false; 应该是if ($(this).attr("id") == 'search' || opening == true) return false;

        【讨论】:

        • === 比较值 类型。它绝对是一个有效的运算符。
        猜你喜欢
        • 1970-01-01
        • 2016-08-05
        • 2017-07-13
        • 2021-09-26
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        相关资源
        最近更新 更多