【发布时间】:2021-08-30 23:04:42
【问题描述】:
if (this.program.segment !== Segment.Y || this.program.segment !== Segment.C) return text
有 5 个不同的段,我想特别检查 2 个,C 和 Y。如果段是其他 3 个段之一,我想返回文本。否则,执行此语句之后的内容。
为什么这个简单的 OR 检查会报错:这个条件总是返回 'true',因为类型 'Segment.Y' 和 'Segment.C' 没有重叠。我查看了关于 SO 的其他示例,但我看不出它在这里是如何工作的。
【问题讨论】:
-
“x 不是鱼或 x 不是自行车”与“x 不是鱼且 x 不是自行车”不同。第一个永远是真的:如果 x 是一条鱼,那么它就不是自行车,因此是真的。如果 x 是自行车,那么它不是鱼,因此是真的。如果 x 是斑马,那么它既不是鱼也不是自行车,所以仍然正确。
-
在这种情况下,您需要 AND,而不是 OR。使用 OR,即使
this.program.segment是Segment.Y或Segment.C之一,另一个不等式检查将返回 true(它不能是 bothSegment.YandSegment.C同时),使整个表达式为真。因此你的 linter 错误。 -
if (![Segment.Y, Segment.C].includes(this.program.segment)) return text
标签: javascript typescript