Diamo un'occhiata al language specification (lo stesso algoritmo è descritto in here) (si noti che definisce <
, ma l'operatore >
ribaltato direttamente il valore risultante).
Che l'operatore non è cercare di convertire entrambi gli operandi di tipi primitivi, con una preferenza per i numeri:
2. a. Let py be the result of calling ToPrimitive(y, hint Number).
2. b. Let px be the result of calling ToPrimitive(x, hint Number).
Nel nostro caso, x === stream.getChar()
e y === ' '
.Dal momento che entrambi gli operandi sono stringhe primitivi già, che si traduce in valori originali (px = x, py = y
), e noi passiamo a:
4. Else, both px and py are Strings
Ora lo fa controlli per vedere se uno degli operandi sono prefissi degli altri, per esempio:
'abc' > 'abcd' // false
'foo' > 'foobar' // false
che è rilevante se getChar()
risultati in uno spazio, dal momento che lo spazio è un prefisso di se stesso:
' ' > ' ' // false
Ci muoviamo via, per trovare il primo carattere x
e y
che siamo sulla stessa posizione nelle stringhe, ma sono diversi personaggi:
sia K il più piccolo intero non negativo in modo tale che il personaggio in posizione k entro px è diverso dal personaggio in posizione k all'interno di py. (Ci deve essere tale ak, perché né String è un prefisso dell'altro.)
(ad esempio, 'efg'
e 'efh'
, vogliamo g
e h
)
I personaggi che abbiamo trovato sono poi convertiti ai loro valori interi:
Let m be the integer that is the code unit value for the character at position k within px.
Let n be the integer that is the code unit value for the character at position k within py.
infine, viene fatto un confronto:
If m < n, return true. Otherwise, return false.
Ed è così che è paragonato allo spazio.
tl; dr Converte entrambi gli argomenti a loro rappresentazioni interi codice-unità, e confronta questo.
Bene, ora che le cose sono spiegate devi dirci un po 'di più sullo sfondo di tutto questo, sono curioso di sapere perché qualcuno dovrebbe controllare che – Sebas