【问题标题】:Why doesn't javaScript allow the use of double comparison? [closed]为什么javascript不允许使用双重比较? [关闭]
【发布时间】:2016-05-26 18:01:34
【问题描述】:

为什么javascript不允许使用双重比较?例如,在64 < str.charCodeAt(i) && str.charCodeAt(i)<=77 中,为简单起见,我为什么不能直接说64 < str.charCodeAt(i)<=77

【问题讨论】:

  • 答案可能只是“因为语言规范不支持”。您是在问哲学问题“为什么语言的设计者没有在规范中包含此功能”?

标签: javascript comparison-operators


【解决方案1】:

你可以,但它不会像你想象的那样做。

64 < str.charCodeAt(i)<=77

被解析为

(64 < str.charCodeAt(i)) <= 77

所以它将执行&lt; 比较,得到一个布尔结果。然后它将该布尔值转换为数字(零或 1)并执行&lt;= 测试。

至于为什么这样的问题,很可能是 C 语言家族的约定(在设计 JavaScript 时已经有 20 年历史了)对许多程序员来说似乎是合适和熟悉的。 C 的工作方式相同。 Java 没有,因为它有一个真正的布尔类型,而且它不喜欢大多数隐式类型转换,所以在这种情况下,整个事情看起来像是一个语法错误。

【讨论】:

    【解决方案2】:

    此语法有效,但不符合您的预期。

    True == 1 和 False == 0 都是真的。所以true &gt; x 在 x 是任何小于 1 的数字时为真,false &gt; x 在 x 是任何小于 0 的数字时为真。

    所以像这样的“双重比较”:

    1 &lt; 2 &lt; 3

    评估为:

    true &lt; 3

    大致相当于:

    1 &lt; 3

    在这种情况下是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多