数値文字列同士を < > で比較すると、number 型に変換されてから数値として比較されます。
Array.sort()
を関数を指定せずに呼び出した場合も内部で同じように比較されているようです。
alert ('5' < '10'); // true
alert ('9e1' < '1e2'); // true
alert ('10' < '0xf'); // true
alert ('1E2' < '1e2'); // false
alert ('1E2z' < '1e2z'); // true (辞書順)
alert ([ '-1', '0', '+1' ].sort ()); // -1,0,+1