【问题标题】:Multiple conditions with OR || in 'if' statement JS使用 OR || 的多个条件在'if'语句中
【发布时间】:2019-03-01 17:41:12
【问题描述】:

我正在尝试使用 OR 在一个“if”语句中编写多个条件。

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

如果状态为空,则导航,如果状态为“已完成”,则导航,如果状态为“失败”,请导航。

这是我目前的代码:

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

_.isEmpty 检查有效,检查状态是否为“已完成”有效,但在检查 || 时对于“失败”,它没有执行此操作。

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

【问题讨论】:

  • ('completed' || 'failed') === 'completed' - 因为这就是 javascript 的工作方式 - 你需要单独检查相等性 ... ($scope.status != 'completed' && $scope.status != 'failed') - 注意 && 不是 || ... 因为 @ 987654327@ 将永远为真 - 因为逻辑

标签: javascript if-statement operators or-operator


【解决方案1】:
$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)

【讨论】:

  • 感谢您的回答和解释:)
【解决方案2】:

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

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

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

【讨论】:

  • 是的,在你解释之后我现在看到了。谢谢你:)
【解决方案3】:

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

你需要

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

注意 && 不是 || ... 因为 $scope.status != 'completed' || $scope.status != 'failed' 总是正确的 - 因为逻辑

【讨论】:

  • 感谢您的回答和解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2020-07-23
  • 2021-11-24
  • 2016-07-26
  • 1970-01-01
  • 2016-05-28
相关资源
最近更新 更多