为什么Javascript中的行为大于此?

时间:2017-04-03 10:50:44

标签: javascript comparison-operators

我正在查看Javascript中的比较运算符并遇到了这些示例:

console.log(1 < 2 < 3);

这等于 true ,感觉就像1小于2,2小于3 ...

console.log(3 > 2 > 1);

然而,这等于 false ,我不明白......

如果您打开Web开发人员工具并查看控制台,这里还会显示jsFiddle行为。

有人建议,这与优先权有关,但是阅读precedence at MDN,我无法找到解释。

任何人都能以合理的简单方式解释,那里发生了什么?

6 个答案:

答案 0 :(得分:1)

你误解了它的运作方式。如果你写3 > 2 > 1,第一个操作实际上是3 > 2,显然会返回true。但是true > 1返回false,因为true被数学运算符更改为1

1 < 2 < 3示例中,它返回true,因为1 < 2返回truetrue < 3操作返回true,因为true是再次变为11明显小于3

答案 1 :(得分:1)

一个想法

1 <2 <3 =(1 <2)<3 =(真实)&lt; 3 =(1)&lt; 3 =真

3> 2> 1 =(3> 2)> 1 =(真)> 1 =(1)> 1 =假

答案 2 :(得分:1)

javascript中的

.trim()对应1 < 2 < 3,对应((1 < 2) < 3)。你实际上是将布尔值与整数进行比较,在我看来这没有任何意义。

如果您想一次进行两次比较,则应将条件重写为true < 3

答案 3 :(得分:1)

console.log(1 < 2 < 3); 

按以下方式评估:

console.log(true < 3); console.log(1 < 3);打印true

然后console.log(3 > 2 > 1)

按以下方式评估:

console.log(true > 1) console.log(1 > 1)打印false

答案 4 :(得分:1)

在JavaScript中,比较运算符的链接不起作用;它将首先评估第一次比较为真/假,将其转换为1/0,然后进行第二次比较:

1 < 2 < 3   =>   (1 < 2) < 3
            =>      true < 3
            =>         1 < 3
            =>          true    

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

您应该将其拆分为两个单独的比较:1 < 2 && 2 < 3

答案 5 :(得分:0)

由于操作从左到右的优先级,以及fach true等同于(1)

console.log(3 > 2 > 1);
3 > 2 => true;
console.log(true > 1 );
1 > 1 => false;
true > 1 => false;