Проверка значения переменной с использованием оператора OR

Итак, младший программист в моей команде сегодня написал следующий фрагмент кода:

if(status === ("incomplete" || "unknown"))

Это, очевидно, не будет делать то, что он намеревался, что и было:

if(status === "incomplete" || status === "unknown"))

Но я не могу объяснить, почему именно первый фрагмент кода не сработает! Или почему он оценивает значение true, если для параметра "status" установлено значение "неполное", но false, когда оно установлено на "неизвестно"...

Ответ 1

В JavaScript оператор || возвращает свой первый операнд, если он принимает значение true (т.е. это не false, null, undefined, "" или 0), и его второй операнд в противном случае.

В первом случае ("incomplete" || "unknown") всегда оценивается как "incomplete", так как он принимает значение true.

Тогда все условие будет следующим:

if (status === "incomplete")

Это объясняет поведение, которое вы наблюдаете.

Ответ 2

("incomplete" || "unknown") вернет "incomplete", что по сравнению с status.

Ответ 3

Но я не могу объяснить, почему именно status === ("incomplete" || "unknown") не работает

Это потому, что выражение в скобках сначала оценивается. Непустая строка incomplete является правдивой, поэтому OR-expression ("incomplete" || "unknown") дает "incomplete", и только затем сравнивается с ваша переменная status.

Чтобы сократить условие, существует множество способов, включая массивы значений, тест регулярных выражений и т.д.