2017-04-15 118 views
0

为什么当我在Chrome控制台中运行这段代码时,我得到了不同的结果?Javascript中的比较运算符

1 < 2 < 3 
true 

3 > 2 > 1 
false 
+2

因为检查返回一个布尔值。然后,布尔值被隐式转换为一个数字,用于下一次比较。 –

回答

1

因为编程不是数学。

1 < 2返回布尔值true然后将其隐式转换为数字1,这确实少于三个。第二个例子中发生的情况相同,但1 > 1返回false

2

Javascript不支持expression like 0 < x < 10。因为<>运算符具有相同的优先级并从左到右应用,实际上,正在评估的是(1 < 2) < 3

由于表达(1 < 2)评估为真时,第二<操作,实际上,评估是否true小于或等于3

1 < 2 < 3 
(1 < 2) < 3 
true < 3 
true 

你的第二个例子可以通过应用相同的过程来理解:

3 > 2 > 1 
(3 > 2) > 1 
true > 1 
false 

至于为什么true < 3计算结果为真,true > 1计算结果为假,答案是更复杂一点,并有在Javascript中使用宽松的输入系统。总之,与数字相比,javascript的true值的计算结果为1,其'false值的计算结果为0.

本章介绍过程应用程序的替换方法相当有帮助。 https://mitpress.mit.edu/sicp/full-text/sicp/book/node10.html

+1

请注意,JavaScript(以及许多其他语言)的行为部分是因为它们来自C,它没有布尔类型。通常在C编程中(在官方布尔头文件之前),会使用预处理器指令来定义'FALSE = 0'和'TRUE = 1'。 –