Why is string "11" less than string "3"?

25,926

Solution 1

Strings are compared lexicographicaly. i.e. character by character until they are not equal or there aren't any characters left to compare. The first character of '11' is less than the first character of '3'.

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

If we use letters then, since b is not less than a, abc is not less than aaa, but since c is less than d, abc is less than abd.

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

You can explicitly convert strings to numbers:

> +'11' < '3'
false

Solution 2

In Many Programming languages Strings are compared as lexicographically. You can check Alphabetical order

Solution 3

By default, JavaScript will compare two strings by each character's ordinal value; much like how strcmp() works in C.

To make your comparison work, you can cast either side to a number to tell the interpreter your intentions of numeric comparison:

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

'11' < Number('3') // false
'11' < +'3' // false

Solution 4

It compares by each character, the following will be false:

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

Since 4 is not less than 3. So essentially your comparison boiled down to this:

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

Solution 5

'1' < '3' and since the first character is the "most significant character" (not that this term makes any sense). Any following characters will not be compared anymore.

Share:
25,926

Related videos on Youtube

jilseego
Author by

jilseego

Updated on August 02, 2020

Comments

  • jilseego
    jilseego almost 4 years
    if ('11' < '3') alert('true');
    

    It's obvious that it's not comparing them by length but by encoding instead. However, I don't understand how it works. I need some explanation :-)

  • Haozhun
    Haozhun almost 12 years
    I guess OP might not know ASCII. Therefore, I believe it may be helpful if a sorted list of characters is included. Here is it: ASCII.
  • jpaugh
    jpaugh almost 9 years
    Yes. String comparison is done mostly alphabetically.
  • viery365
    viery365 almost 8 years
    Just a quick note: pay attention to the lowercases and uppercases. Uppercases come before lowercases. Ex: 'abc' < 'Abd' //false