【发布时间】:2019-01-09 21:31:39
【问题描述】:
为什么3>2>1 返回false 而1 < 2 < 3 返回true?
console.log(1 < 2 < 3);
console.log(3 > 2 > 1);
【问题讨论】:
为什么3>2>1 返回false 而1 < 2 < 3 返回true?
console.log(1 < 2 < 3);
console.log(3 > 2 > 1);
【问题讨论】:
由于1 < 2 的计算结果为true 和3 > 2 的计算结果为true,所以你基本上是在做:
console.log(true < 3);
console.log(true > 1);
并且true 被转换为1,因此结果。
【讨论】:
因为它从左到右解释,因为它试图转换为相同的类型。
1 < 2 < 3 变为 true < 3,因为我们在比较数字,所以将其转换为 1 < 3,这是事实。
3 > 2 > 1 变为 true > 1,因为我们在比较数字,所以将其转换为 1 > 1,这是错误的。
【讨论】:
那是因为它是从左到右计算的,所以它相当于下面的命令:
console.log(true < 3);
console.log(true > 1);
【讨论】:
编译器会这样读
$console.log((1 < 2) < 3)
和$ console.log(( 3>2 ) > 1)
在第一种情况下:$ console.log(1 < 2 < 3)
第一个编译器执行 1
以相同的逻辑执行第二个,它会给你错误。
【讨论】:
运算符“”关联性是从左到右的所以
查看以下链接 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
console.log(1 console.log(true (true 表示 1)=> console.log(1 答案是正确的
console.log(3 > 2 > 1) ==> console.log(true >1)==> (true 表示 1)=> console.log(1 >1); 答案是错误的
console.log(3 > 2 >=1) ==> console.log(true >=1)==> (true 表示 1)=> console.log(1 = 1 ); 答案是正确的
【讨论】: