javascript - JS 中的间隔比较不会爆炸

标签 javascript boolean intervals

为什么 JavaScript 中的区间比较不会爆炸?

if(-1 < x < 1) {
  console.log('x: ', x)
}

为什么我们可以这样做而不会出现错误?

而且似乎:

  • -1 < x < 1对于 x<=-1 是正确的
  • 1 < x < 1对于 x<=1 是正确的
  • -1 < x < -1总是假的
  • -2 < x < 2永远正确

在最后两种情况下,它似乎只是比较表达式的两端。这些表达式是如何评估的?

最佳答案

因为 JavaScript 允许隐式类型强制转换,在本例中是从 boolean 值到数字。 -1 < x结果是一个 boolean 值,然后隐式强制转换为 (result) < 1 的数字(true = 1,false = 0)部分。所以:

  • 何时 -1 < x为 false,第二部分为 0 < 1这是真的。

  • 何时 -1 < x是真的,第二部分是 1 < 1这是错误的。

这在 abstract relational comparison 中有介绍。规范中的算法,以及它链接到的各种操作。

-1 < x < -1 is always false
-2 < x < 2 is always true

In the last 2 cases it seems it is just comparing the 2 ends of the expressions. How are those expressions evalued?

使用x = -1x = 1 :

  • 如果x = -1 ,然后-1 < x是假的,所以剩下的就是0 < -1 ,这是错误的。
  • 如果x = 1 ,然后-1 < 1是真的,所以剩下的就是1 < -1这是错误的。
  • 如果x = -1 ,然后-2 < -1是真的,所以剩下的就是1 < -2 ,这是错误的。
  • 如果x = 1 ,然后-2 < 1是真的,所以剩下的就是1 < -2这是错误的。

关于javascript - JS 中的间隔比较不会爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320295/

相关文章:

javascript - 如何使用 React-Router 3 使 Route 中的参数成为可选参数?

c# - 比较转换为对象的值类型

Java 二维 boolean 数组值

java - boolean = true 和 just boolean 有什么区别

linux - Shell 脚本输出日期之间的整个间隔

Javascript 闭包与 Javascript OO

javascript - 简单示例 : Setting attributes by iterating

javascript - 使用文件系统-fs-在nodejs中添加css文件

jquery - 如何每 15 秒刷新一次 Twitter API?

c++ - GDI+ gif速度问题