Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 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.

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