2012-06-02 16 views

Odpowiedz

38

Ciągi są porównywane znak po znaku, dopóki nie są równe lub nie ma żadnych znaków do porównania. Pierwszy znak "11" jest mniejszy niż pierwszy znak "3".

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

Jeśli używamy litery a od b jest nie mniejsza niż a, abc jest nie mniejsza niż aaa, ale ponieważ c jest mniejsza niż d, abc jest mniejsza niż abd.

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

Tak. Porównanie łańcuchów odbywa się głównie alfabetycznie. – jpaugh

+0

Po prostu krótka uwaga: zwracaj uwagę na małe i duże litery. Uppercases występują przed małymi literami. Np .: ''abc' <'Abd' // false' – viery365

2

'1' < '3' a ponieważ pierwszy znak to „najbardziej znaczącą postać” (nie, że termin ten ma jakiś sens). Następujące znaki nie będą już porównywane.

+0

Zgaduję, że OP może nie znać ASCII. Dlatego uważam, że pomocne może być uwzględnienie posortowanej listy znaków. Oto ona: [ASCII] (http://en.wikipedia.org/wiki/ASCII). – Haozhun

3

Porównuje przez każdego znaku, co następuje będzie false:

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

Od 4 jest nie mniejsza niż 3. Więc zasadniczo swoją porównanie sprowadzała się do tego:

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

Domyślnie, JavaScript będzie porównać dwa ciągi przez wartość porządkową każdego bohatera; podobnie jak strcmp() pracuje w C

Aby kontynuować pracę porównania, można oddać po obu stronach do numeru powiedzieć interpreter swoje intencje porównaniu numerycznej:

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

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

Zostało to potraktowane jako porównanie ciągów. Więc 1 < 3 (pierwsze znaki dwóch ciągów), a następnie ciąg 11 poprzedza ciąg 3

Powiązane problemy