繁体   English   中英

严格的价值比较(小于/大于)

[英]Strict Value Comparison (less/greater than)

我很确定以下行为不正确(至少在我的脑海中)因为一些真实的疯狂:

var x = 5;
0 < x < 10 // True, and returns true.
0 < x < 2 // False, and returns true.
0 < x < 0 // False, and returns false.

我的方法是,(0 <5)评估为true,(true <2)也评估为true(即1 <2)。 我用第三个语句对此进行了测试,这似乎证实了我的理论。 现在问的问题是:有没有办法让这个“工作”没有大量的额外代码?

“......有没有办法让这个'工作'没有大量的额外代码?”

当然,使用&& ......

(0 < x) && (x < 10)

如果需要,可以删除括号。

正如您所注意到的,大多数编程语言都不会实现“之间”,因为您将以数学方式编写它。 而是将比较分成两部分,每次只比较两个元素。

var x = 5;
0 < x && x < 10
0 < x && x < 2
0 < x && x < 2

因此,第一行显示“零小于x且x小于十”。 如果您不确定表达式的评估顺序,将作为分组。

(0 < x) && (x < 10)

问题源于<是二元运算符的事实。

这意味着其中一个<一次评估,而不是两者。

这意味着无论评估的顺序如何(IIRC是L到R),其中一个比较都是错误的。

因为这是CODE。

不是代数。

否则,巧妙地使用&&运算符,正如其他答案所讨论的那样,可以简化您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM