为什么 3 > 2 > 1 返回 false 而 1 < 2 < 3 返回 true 呢?

22
为什么3>2>1 返回 false,而1 < 2 < 3 返回 true

console.log(1 < 2 < 3);
console.log(3 > 2 > 1);

5个回答

41

由于 1 < 2 的结果为true,而3 > 2 的结果也是 true,因此你基本上是在执行:

console.log(true < 3);
console.log(true > 1);

而且 true 被转换为 1,因此得到了这个结果。


请参阅MDN:运算符优先级以了解运算符的优先级和结合性。 - feeela

11
因为它从左到右解释并尝试强制转换为相同类型。 1 < 2 < 3 变成 true < 3,因为我们正在比较数字,所以被转换为1 < 3,这是真的。 3 > 2 > 1 变成 true > 1,因为我们正在比较数字,所以被转换为1 > 1,这是假的。

8

这是因为它从左到右进行评估,使其等同于以下命令:

console.log(true < 3);
console.log(true > 1);


5
运算符"<"和">"的结合性是从左到右,因此

请查看下面的链接 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

console.log(1 < 2 < 3) ==> console.log(true < 3)==> (true表示1)=> console.log(1 < 3); 答案为true

console.log(3 > 2 > 1) ==> console.log(true >1)==> (true表示1)=> console.log(1 >1); 答案为false

console.log(3 > 2 >=1) ==> console.log(true >=1)==> (true表示1)=> console.log(1 = 1); 答案为true


2
编译器会这样读取: $ console.log((1 < 2) < 3)$ console.log((3 > 2) > 1) 第一种情况: $ console.log(1 < 2 < 3) 首先,编译器执行1<2,返回1(true),然后它执行1<3,也是1(true)。因此整个结果为true。
用同样的逻辑执行第二个,结果将为false。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接