我很确定以下行为不正确(至少在我的脑海中)是因为一些真实的疯狂:
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)评估为真,而(真&lt; 2)也评估为真(即1 <2)。我用第三个语句对此进行了测试,这似乎证实了我的理论。现在问的问题是:有没有办法让这个“工作”没有大量的额外代码?
答案 0 :(得分:10)
“......有没有办法让这个”工作“没有大量的额外代码?”
当然,请使用&&
...
(0 < x) && (x < 10)
如果需要,可以删除括号。
答案 1 :(得分:1)
正如您所注意到的,大多数编程语言都不会实现“之间”,因为您将以数学方式编写它。而是将比较分成两部分,每次只比较两个元素。
var x = 5;
0 < x && x < 10
0 < x && x < 2
0 < x && x < 2
因此,第一行显示“零小于x且x小于十”。如果您不确定表达式的评估顺序,将作为分组。
(0 < x) && (x < 10)
答案 2 :(得分:1)
问题源于&lt;是一个二元运算符。
这意味着其中一个&lt;一次评估,而不是两者。
这意味着无论评估的顺序如何(IIRC是L到R),其中一个比较都是错误的。
因为这是CODE。
不是代数。
否则,巧妙地使用&amp;&amp;如其他答案所讨论的那样,运算符将简化您的问题。