多个条件用 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 || B
returnsA
中如果为真,否则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'
永远是真的 - 因为逻辑
我试图在一个 '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 || B
returnsA
中如果为真,否则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'
永远是真的 - 因为逻辑