【问题标题】:Why is string "11" less than string "3"? [duplicate]为什么字符串“11”小于字符串“3”? [复制]
【发布时间】:2012-06-07 10:49:37
【问题描述】:
if ('11' < '3') alert('true');

很明显,它不是通过长度来比较它们,而是通过编码来比较它们。但是,我不明白它是如何工作的。我需要一些解释:-)

【问题讨论】:

    标签: javascript string comparison


    【解决方案1】:

    比较字符串lexicographicaly。即逐个字符,直到它们不相等或没有任何字符可供比较。 '11'的第一个字符小于'3'的第一个字符。

    > '11' < '3'
    true
    > '31' < '3'
    false
    > '31' < '32'
    true
    > '31' < '30'
    false
    

    如果我们使用字母,那么由于b不小于aabc不小于aaa,但是由于c小于dabc小于abd.

    > 'abc' < 'aaa'
    false
    > 'abc' < 'abd'
    true
    

    您可以将字符串显式转换为数字:

    > +'11' < '3'
    false
    

    【讨论】:

    • 是的。字符串比较主要按字母顺序进行。
    • 只是一个简短的说明:注意小写和大写。大写字母在小写字母之前。例如:'abc' &lt; 'Abd' //false
    【解决方案2】:

    默认情况下,JavaScript 会根据每个字符的序数值比较两个字符串;很像 strcmp() 在 C 中的工作方式。

    为了使您的比较工作,您可以将任一侧转换为数字,以告诉解释器您进行数字比较的意图:

    Number('11') < '3' // false
    +'11' < '3' // false, using + to coerce '11' to a numeric
    
    '11' < Number('3') // false
    '11' < +'3' // false
    

    【讨论】:

      【解决方案3】:

      在许多编程语言中,字符串被比较为lexicographically。可以查看Alphabetical order

      【讨论】:

        【解决方案4】:

        按每个字符比较,下面是false

        if ('41' < '3') alert('true');
        

        因为4 不小于3。所以基本上你的比较归结为:

        if ('1' < '3') alert('true'); // true
        

        【讨论】:

          【解决方案5】:

          '1' &lt; '3' 并且因为第一个字符是“最重要的字符”(并不是说这个术语有任何意义)。将不再比较任何以下字符。

          【讨论】:

          • 我猜 OP 可能不知道 ASCII。因此,我相信如果包含排序的字符列表可能会有所帮助。这是它:ASCII.
          【解决方案6】:

          它已被视为字符串比较。所以 1

          【讨论】:

            猜你喜欢
            • 2016-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-15
            • 2011-02-26
            • 1970-01-01
            • 2021-12-31
            • 2011-09-05
            相关资源
            最近更新 更多