问题
在看 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 是完全当作是一个表达式在进行运算。