JavaScript 比较运算符解惑

148 阅读1分钟

问题

在看 python 的时候,偶然发现有一个代码块比较有意思,之前从来没想过这么去使用:

if 18 <= 22 < 65:
    print('ok')

可以进行链式比较,如果我们直接:

print( 18 <= 22 < 65 ) # True

于是我想到在 js 里面试试看。

果然,也可以使用!

但接下来的操作,让我突然有点看不懂了:

2 >= 3 <= 2

当我们运行这段比较的时候,居然告诉我们 true?什么情况!

解惑

我们借助 astexplorer.net/ 在线语法树分析来看看这段代码到底是怎么被解析的? 也许就能猜出个大概了,具体流程是这样的:

  • 2 >= 3 返回的是false!
  • false 等于 0
  • 0 <= 2

当然,最后告诉你的是 true 。

结论

js 和 python 中,这个操作是不一样的,python的理解是数学上的比较,而 js 是完全当作是一个表达式在进行运算。