У меня есть условие, как показано ниже, чтобы проверить переменные Qmart и linearstatus.
Хотя они имеют требуемые значения, моя инструкция if всегда соответствует условию else. Есть ли какая-то ошибка, которую я делаю для проверки этих значений?

var Qmart = "A2";
var linearstatus  = "linear"

if (Qmart === ("E2" || "A2" || "B2" || "D2") && linearstatus == "linear") {
} else {
    alert("it is an else condition");
}
0
kiran k 11 Дек 2016 в 09:12

3 ответа

Лучший ответ

Измените условие if на следующее

if ((Qmart === "E2" || Qmart === "A2" || Qmart === "B2" || Qmart === "D2") && (linearstatus == "linear")) {

} else {
  alert("it is an else condition");
}

Надеюсь, это поможет

3
Geeky 11 Дек 2016 в 06:16

Если вы хотите проверить несколько значений, которые вы не можете использовать Qmart === ("E2" || "A2" || "B2" || "D2"), вам нужно проверить каждое условие отдельно:

if ((Qmart === "E2" || Qmart === "A2" || Qmart === "B2" || Qmart === "D2") && linearstatus == "linear") {

} else {
    alert("it is an else condition");
}

Вы можете спросить, почему ваш код не выдавал никаких ошибок во время выполнения. Проблема в том, что код

"E2" || "A2" || "B2" || "D2"

Является допустимым кодом JavaScript, и он возвращает первое истинное значение. Эта функция называется оценка короткого замыкания и часто используется в JavaScript. В вашем случае приведенное выше утверждение возвращает первое истинное значение, которое всегда равно «E2». Это означает, что ваш код идентичен

if (Qmart === "E2" && linearstatus == "linear")

И когда Qmart равен A2, условие оценивается как false, и выполняется else оператор.

2
dotnetom 11 Дек 2016 в 06:23

Вы могли бы сделать что-то вроде этого.

var QMart = "E2",
  linearstatus = "linear";

var conditions = ["E2", "A2", "B2", "D2"];
if (conditions.indexOf(QMart) !== -1 && (linearstatus == "linear")) {
  console.log("In truthy condition");
} else {
  console.log("it is an else condition");
}
2
Sreekanth 11 Дек 2016 в 08:47