【问题标题】:javascript comparison operatorsjavascript比较运算符
【发布时间】:2014-04-01 19:16:48
【问题描述】:

我来自python背景,在做了一个javascript项目后遇到了一个问题

0

输出为真 我的猜测是它运行第一个运算符并完全无视第二个

python 会渲染为 false。

我不关心如何让它工作,但奇怪的是它不在文档中它唯一暗示要做的事情 (0

我猜我的问题是,如果有人能回答,为什么会这样

【问题讨论】:

  • “简单”是一个相对术语。人类读者可能会发现将“0

标签: javascript python comparison operators


【解决方案1】:

在 JavaScript 中,这个:

0 < 5 < 3

这样评估:

(0 < 5) < 3

翻译成这样:

true < 3

进一步翻译成这个(因为true 在数字上下文中是1):

1 < 3

这是真的。


然而,Python 的设计不同。正如here 所记录的那样,它解释了这一点:

0 < 5 < 3

相当于这个:

0 < 5 and 5 < 3

上面的表达式可以进一步翻译成这样:

True and False

这是错误的。

【讨论】:

  • 这完全有道理,我只是从未遇到过这个问题,因为我在过去 2 年里才接触过 python。谢谢!
【解决方案2】:

这是一步一步的评估。将数字和布尔值与&lt; 进行比较时,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) 的结果。

【讨论】:

    【解决方案3】:

    在 JavaScript 中,Relational operators 从左到右执行:

    0 < 5
    

    应该是真的,即1,所以

    0 < 5 < 3
    

    翻译为:

    1 < 3
    

    这是真的。

    另一方面,Python 中的comparison operations 具有相同的优先级。

    也与 C 不同,a &lt; b &lt; c 之类的表达式具有以下解释: 在数学中是传统的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多