无法在JavaScript中生成多个if条件?

无法在JavaScript中生成多个if条件?,javascript,if-statement,Javascript,If Statement,我完全不知道这为什么不起作用。对我来说毫无意义 这将返回语法错误:解析错误: if ($(this).attr("id") === 'search' || opening = true) return false; 为了更好地衡量,我还尝试了以下方法,得到了相同的结果: if (1 = 1 && 2 = 2) { return false; } 在JavaScript中,=用于赋值,而==和===用于比较它们 当您在if语句中输入opening=true时,您并没有检查ope

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

这将返回语法错误:解析错误:

if ($(this).attr("id") === 'search' || opening = true) return false;
为了更好地衡量,我还尝试了以下方法,得到了相同的结果:

if (1 = 1 && 2 = 2) { return false; }
在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。

您的状况有错误

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

if ($(this).attr("id") === 'search' || opening == true) return false;
问题在于等号

=不同于==


第一个是赋值运算符。第二个是用于比较的

有三个不同的操作符在起作用:

=:分配 ==:相等 ==:严格相等
=实际修改变量,因此不应在if语句中使用它。也就是说,你应该使用…||期初==真,而不是…||打开=真。

第一个示例应为:

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

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

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

这样测试时:

opening=true;
您真正做的是将opening设置为true的值。使用==代替

最后,操作顺序,即使正确,也会变得混乱。在比较的每个部分用括号括起来

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

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

因此,如果$this.attrid=='search'| | opening==true,则返回false;
如果$this.attrid='search'| | opening==true返回false,则应为

第二个变量给出错误,因为您无法为1赋值,因为它不是有效的变量名。与2相同。==比较值和类型。它肯定是一个有效的运算符。还有其他代码吗?因为在这里它并没有做错任何事情,除了开头的赋值。问题是:为什么需要更多的代码?您可以非常清楚地看到,这里的问题是使用单个equals来确定语句中的相等性。请注意,在if条件中使用=通常被认为是不好的做法,但仍然是完全有效的。问题中的代码给出错误的原因是,运算符优先级导致表达式的计算结果为$this.attrid=='search'| | opening=true,当然,第一部分$this.attrid=='search'| | opening不是一个变量,因此无法为其赋值。