我来自python背景,在做了一个javascript项目
之后遇到了一个问题0< 5< 3
输出为true 我的猜测是它运行第一个操作符并完全忽略第二个
和python会呈现为假。
我并不担心如何让这个工作起作用,但奇怪的是,它不在文件中而只是暗示做(0< x&& x< 3< 3)而不是保持简单猜猜我的问题是,如果有人能够回答
,为什么会这样呢?答案 0 :(得分:5)
在JavaScript中,这个:
0 < 5 < 3
的评估如下:
(0 < 5) < 3
转换为:
true < 3
进一步翻译为此(因为true
在数字上下文中是1
):
1 < 3
这是真的。
0 < 5 < 3
等同于:
0 < 5 and 5 < 3
上述表达可以进一步转化为:
True and False
这是假的。
答案 1 :(得分:2)
这是一步一步的评估。将数字和布尔值与<
进行比较时,true变为1,0变为false。
0 < 5 < 3 // =>
true < 3 // =>
Number(true) < 3 // =>
1 < 3 // =>
true
请参阅spec 11.8.5规则3,其中介绍了ToNumber
投射。
3)如果不是Type(px)都是String而Type(py)是String,那么
a)设nx为调用ToNumber(px)的结果。因为px和py是原始的 价值评估顺序并不重要。
b)让ny成为调用ToNumber(py)的结果。
答案 2 :(得分:0)
在JavaScript中,Relational operators从左到右执行:
0 < 5
是真的,即1
,所以
0 < 5 < 3
将翻译为:
1 < 3
这是真的。
另一方面,Python中的comparison operations具有相同的优先级。
与C不同,像
a < b < c
这样的表达式也有解释 在数学中是常规的。