Несколько условий с OR ||в «если» заявление JS - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь написать несколько условий в одном операторе 'if' с помощью OR.

sudo code Я пытаюсь написать:

, если статус пуст, перейти, если статуснавигация «завершена», если статус «неудачен».

Это мой код:

   if ((_.isEmpty($scope.status)) || ($scope.status != ('completed' || 'failed'))) {
        return frameworkService.navigateTo('giftcardWelcome');
    }

Проверка _.isEmpty работает, проверка, имеет ли статус 'выполненные работы, но при проверке ||для 'fail' это не выполняется.

Может кто-нибудь объяснить мне, почему и как правильно написать это, пожалуйста?Я знаю, что мог бы написать расширенное заявление if, но хотел бы иметь чистый, переработанный способ.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Выражение $scope.status != ('completed' || 'failed') действительно работает так, как выглядит, оно выполняет логическое ИЛИ между 'completed' и 'failed', а затем сравнивает результат этого выражения с $scope.status.

Результатом'completed' || 'failed' будет 'completed', что означает, что ваше состояние действительно эквивалентно $scope.status != 'completed'.

Если вы хотите убедиться, что $scope.status не равно ни одной из строк, вам необходимо сравнить скаждая строка явно: ($scope.status != 'completed' && $scope.status != 'failed').

0 голосов
/ 26 сентября 2018

('completed' || 'failed') === 'completed' - потому что так работает javascript - вам нужно проверить равенство по отдельности ...

Вам понадобится

|| ($scope.status != 'completed' &&  $scope.status != 'failed')

note && не || ... потому что $scope.status != 'completed' || $scope.status != 'failed' всегда будет верным - из-за логики

0 голосов
/ 26 сентября 2018
$scope.status != ('completed' || 'failed')

Это не делает то, что вы думаете, что делает.В JavaScript A || B возвращает A, если это правда, в противном случае B;поскольку 'completed' является правдивым, это эквивалентно

$scope.status != 'completed'

Чтобы проверить, является ли $scope.status одним из двух значений, вам нужно либо явно проверить, что оба они различны (примечание &&,не ||):

$scope.status != 'completed' && $scope.status != 'failed')

или проверка того, что его нет в наборе (или другом контейнере):

let endSet = new Set(['completed', 'failed']);
// ...

endSet.has($scope.status)
...