逻辑运算符 ||不知何故没有给出预期的结果

Logical Operator || somehow doesn't give desired outcome

我有这个变量可以切换某些内容是否可以编辑或看起来不像这样

enabled: !(parseInt("@Model.Status") === @((int)Status.Active) ||
!(parseInt("@Model.Status") === @((int)Status.Expired)) && '@Model.EditMode' === 'True'),

出于某种原因,如果这适用于状态为 active 而不是 expired 的人,并且如果我将其翻转并将 expired 放在第一位,则它适用于 expired但不是 active 的....所以我在这里错了一些想法是如果状态是 ExpiredActive 启用应该是假的所以它不能全部编辑其他状态应该没问题。

我也试过这样写,第二个语句用括号括起来

!((parseInt("@Model.Status") === @((int)Status.Expired))

像这样反转 if 但 none 解决了它

 (parseInt("@Model.Status") !== @((int)Status.Expired)

Pointy 的精彩评论!但不幸的是,这也不是这里的问题,因为即使我跳过整个 && 运算符,我仍然遇到与 just

相同的问题
 !(parseInt("@Model.Status") === @((int)Status.Active) || !(parseInt("@Model.Status") === @((int)Status.Expired)))

这仍然是同样的问题

你的条件好像不对。 !(parseInt("@Model.Status") === @((int)Status.Active) || !(parseInt("@Model.Status") === @((int)Status.Expired)) && '@Model.EditMode' === 'True')

可以看作是!(a || !(b) && c),其中

a = parseInt("@Model.Status") === @((int)Status.Active)
b = parseInt("@Model.Status") === @((int)Status.Expired)
c = '@Model.EditMode' === 'True'

AND 运算符 (&&) 的优先级高于 ||,因此可以使用 !(a || (!(b) && c))2 + 3 * 4 相同的分组方式来显示实际求值顺序被评估为 2 + (3 * 4).

但是,呈现的逻辑与要求不符。状态应该是活动或过期 编辑模式应该是 "True"。但是,似乎括号不匹配可能是由于打字错误,因为 entire 逻辑表达式被否定,而且第二个条件也被否定,而它不应该被否定。

正确的逻辑表达式是!(a || b) && c。替换逻辑测试:

!(parseInt("@Model.Status") === @((int)Status.Active) || parseInt("@Model.Status") === @((int)Status.Expired) &&
  '@Model.EditMode' === 'True'

我不熟悉 Kendo,但如果可以使用 !==,则可以通过删除一些括号来简化表达式。根据 De Morgan's laws !(a || b) 等同于 !a && !b,因此如果我们执行该替换,我们将得到 !a && !b && c。如果我们也从 !(parseInt("@Model.Status") === @((int)Status.Active)) 更改为 parseInt("@Model.Status") !== @((int)Status.Active) 那么我们最终会得到:

parseInt("@Model.Status") !== @((int)Status.Active) && 
  parseInt("@Model.Status") !== @((int)Status.Expired) && 
  '@Model.EditMode' === 'True'