1<2<3 是真的,但与这 3>2>1 相反是错误的,为什么?[复制]

1<2<3 is true but reverse of this 3>2>1 is false, why? [duplicate]

提问人:Atomcode 提问时间:11/13/2023 更新时间:11/13/2023 访问量:62

问:

我是编程和学习 Web 开发的新手,当我在 javascript 中练习布尔数据类型时,我遇到了一个问题:

法典: " 控制台.log(1<2<3); 控制台.log(3>2>1); "

输出: 真 假

我知道第一个的答案是正确的,但对于第二个答案,为什么它打印了错误。

JavaScript 布尔值

评论

0赞 Layhout 11/13/2023
如果你一次评估 2 个数字,你就会得到它。
0赞 LVC 11/13/2023
这是因为 JavaScript 的计算结果如下:3>2 = true,然后 javascript 尝试将值转换为数字,因此 true 将变为 1,因此它变为 1>1,即 false。这就是为什么 console.log(1<2<3) 为 true,因为 1 < 2 为 true,然后 javascript 将 true 转换为 1,因此 1 < 3 为 true。

答:

1赞 Bilal Saad 11/13/2023 #1

首先,它评估“3 > 2”,这是真的。 然后,它计算“真> 1”,在数字上下文中将“真”视为 1,这是假的。

0赞 Nymul Islam Moon 11/13/2023 #2

console.log(1 < 2 < 3);和控制台.log(3 > 2 > 1);在于 JavaScript 如何处理比较运算符。

让我们分解每个表达式:

控制台.log(1 < 2 < 3);

在本例中,表达式从左到右计算。 1 < 2 为真,因此< 3 为真。 JavaScript 在数字上下文中将 true 转换为 1,因此它变为 1 < 3。 最终结果是正确的。 控制台.log(3 > 2 > 1);

与第一个示例类似,此表达式也是从左到右计算的。 3 > 2 为真,所以它> 1 为真。 JavaScript 在数字上下文中将 true 转换为 1,因此它变为 1 > 1。 最终结果是错误的。 行为差异的原因是 < 和 > 运算符在 JavaScript 中是左关联的,这意味着它们是从左到右计算的。因此,在第二个示例中,它首先计算 3 > 2(为 true),然后将 true > 1(为 false)进行比较。

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

试试这个

评论

0赞 Jaromanda X 11/13/2023
当然,这些让它看起来像是工作......但是呢——这是真的还是假的?:p让我们想象一下一段代码正在做......你使用你的建议......()3 > 2 > 3a > b > ca > (b > c)
0赞 Nymul Islam Moon 11/13/2023
3 > 2 > 3 在这里,代码将首先执行 3 > 2,这是真的,所以这里将有 1 而不是 3 > 2,在结果 1 > 3 为 false 之后,这里将有 1 和最后一部分。因此,您必须了解正在发生的事情以及将要处理的原因是什么,因为您必须将语言保持在较低水平
0赞 Jaromanda X 11/14/2023
但是 3 > 2 > 3 ....这是真的还是假的?我的观点是,OP 预计 3 > 2 > 1 是真的,但你必须让它成为现实。但是 3 > 2 > 3 应该是假的,并且确实会产生假,但是,加上括号,就变成了真。我的观点是,一般来说,答案不是应该写的()3 > 2 > 33 > (2 > 3)()a > b > c(a > b) && (b > c)