【问题标题】:Why does it work to compare string values of invalid numbers? [duplicate]为什么比较无效数字的字符串值有效? [复制]
【发布时间】:2020-01-14 10:18:56
【问题描述】:

我一直在比较 JS 中的版本代码,发现这些类型的比较始终如一,我不知道为什么:

"3.4.06" < "3.4.02"   (false)
"3.3.01" < "3.4.02"   (true)
"3.3.01" > "3.4.02"   (false)
"3.5.2"  < "3.4.1"    (false)
"3.5.2"  > "3.4.0015" (true)

这些显然不是 javascript 中的有效数字,但是 JS 引擎以某种方式比较字符串值以使事情正常进行。任何人都可以深入了解 JS 引擎是如何做到这一点的吗?我在 V8 上运行。

【问题讨论】:

  • javascript.info/comparison Javascript 逐字母比较字符串。您可能知道,char 基本上是内存中的数字。
  • 它只是逐个字符地进行字典检查。 34 之前,所以 "3" &lt; "4" 成功。然而,这意味着"4" &lt; "30"false,因为43 更晚
  • 词汇与数字。 Stings 在词汇上进行比较。所以"100" &lt; "9",因为“1”出现在“9”之前,而“100”不被视为一个完整的实体。 Numerical 将比较整个数字的值,其中100 &gt; 9
  • 太棒了!我不知道词汇比较。感谢您的洞察力!

标签: javascript string numbers comparison string-comparison


【解决方案1】:

因为 JavaScript 会按顺序比较每个字符。比方说"10" &gt; "2",它会返回false,因为JS首先比较"1"&gt;"2"然后它会导致false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2015-08-30
    • 2022-03-30
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多