逻辑运算符 ||不知何故没有给出预期的结果
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
的....所以我在这里错了一些想法是如果状态是 Expired
或 Active
启用应该是假的所以它不能全部编辑其他状态应该没问题。
我也试过这样写,第二个语句用括号括起来
!((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'
我有这个变量可以切换某些内容是否可以编辑或看起来不像这样
enabled: !(parseInt("@Model.Status") === @((int)Status.Active) ||
!(parseInt("@Model.Status") === @((int)Status.Expired)) && '@Model.EditMode' === 'True'),
出于某种原因,如果这适用于状态为 active
而不是 expired
的人,并且如果我将其翻转并将 expired
放在第一位,则它适用于 expired
但不是 active
的....所以我在这里错了一些想法是如果状态是 Expired
或 Active
启用应该是假的所以它不能全部编辑其他状态应该没问题。
我也试过这样写,第二个语句用括号括起来
!((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'