Warum ist String “11” kleiner als String “3”?

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

Es ist offensichtlich, dass sie nicht nach Länge, sondern nach Codierung verglichen werden. Allerdings verstehe ich nicht, wie es funktioniert. Ich brauche eine Erklärung 🙂

   

Zeichenfolgen werden Zeichen für Zeichen verglichen, bis sie nicht gleich sind oder keine Zeichen zum Vergleichen übrig sind. Das erste Zeichen von ’11’ ist kleiner als das erste Zeichen von ‘3’.

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

Wenn wir Buchstaben verwenden, dann ist, da b nicht kleiner als a , abc nicht kleiner als aaa , aber da c kleiner als d , ist abc kleiner als abd .

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

In vielen Programmiersprachen werden Strings als lexikographisch verglichen. Sie können die alphabetische Reihenfolge überprüfen

Es vergleicht nach jedem Zeichen, das folgende wird false :

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

Seit 4 ist nicht weniger als 3 . Im Wesentlichen hat sich Ihr Vergleich auf Folgendes ausgewirkt:

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

Standardmäßig vergleicht JavaScript zwei Strings nach dem Ordinalwert jedes Zeichens. ähnlich wie strcmp() in C funktioniert.

Damit der Vergleich funktioniert, können Sie beide Seiten auf eine Zahl umwandeln, um dem Interpreter Ihre Absichten des numerischen Vergleichs mitzuteilen:

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

'1' < '3' und da das erste Zeichen das "signifikanteste Zeichen" ist (nicht, dass dieser Begriff einen Sinn ergibt). Nachfolgende Zeichen werden nicht mehr verglichen.

Es wurde als String-Vergleich behandelt. Also 1 <3 (1. Zeichen von zwei Strings), dann string 11 vor String 3