多个条件用 OR ||在 'if' 声明 JS

Multiple conditions with OR || in 'if' statement JS

我试图在一个 'if' 语句中用 OR 写多个条件。

我正在尝试编写的 sudo 代码:

如果状态为空导航,如果状态为'completed'导航,如果状态为'failed'导航。

到目前为止,这是我的代码:

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

_.isEmpty 检查有效,检查状态是否为 'completed' 有效,但检查 || 时对于 'failed' 它没有执行这个。

有人可以向我解释为什么以及如何正确地写吗?我知道我可以写一个扩展的 if 语句,但想要一个干净的重构方式。

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

这与您认为的不同。在JavaScriptA || BreturnsA中如果为真,否则B;因为 'completed' 是真实的,这等同于

$scope.status != 'completed'

为了检查 $scope.status 是否是两个值之一,您需要明确检查两者是否不同(注意 &&,而不是 ||):

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

或测试它不在集合(或另一个容器)中:

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

endSet.has($scope.status)

表达式 $scope.status != ('completed' || 'failed') 确实像它看起来的那样工作,它在 'completed''failed' 之间进行逻辑或运算,然后将该表达式的结果与 $scope.status 进行比较.

'completed' || 'failed'的结果将是'completed',这意味着您的条件实际上等同于$scope.status != 'completed'

如果您想确保 $scope.status 不等于任何一个字符串,您需要明确地与每个字符串进行比较:($scope.status != 'completed' && $scope.status != 'failed').

('completed' || 'failed') === 'completed' - 因为这就是 javascript 的工作方式 - 你需要单独检查相等性......

你需要

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

注意 && 不是 || ... 因为 $scope.status != 'completed' || $scope.status != 'failed' 永远是真的 - 因为逻辑