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

时间:2012-02-16 21:02:42

标签: javascript syntax

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

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)。我用第三个语句对此进行了测试,这似乎证实了我的理论。现在问的问题是:有没有办法让这个“工作”没有大量的额外代码?

3 个答案:

答案 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;如其他答案所讨论的那样,运算符将简化您的问题。