我正在查看Javascript中的比较运算符并遇到了这些示例:
console.log(1 < 2 < 3);
这等于 true ,感觉就像1小于2,2小于3 ...
console.log(3 > 2 > 1);
然而,这等于 false ,我不明白......
如果您打开Web开发人员工具并查看控制台,这里还会显示jsFiddle行为。
有人建议,这与优先权有关,但是阅读precedence at MDN,我无法找到解释。
任何人都能以合理的简单方式解释,那里发生了什么?
答案 0 :(得分:1)
你误解了它的运作方式。如果你写3 > 2 > 1
,第一个操作实际上是3 > 2
,显然会返回true
。但是true > 1
返回false
,因为true
被数学运算符更改为1
。
在1 < 2 < 3
示例中,它返回true,因为1 < 2
返回true
而true < 3
操作返回true
,因为true
是再次变为1
和1
明显小于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)
.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;