Chúng ta hãy ngây ngô tại language specification (thuật toán riêng của mình được mô tả trong here) (đừng lưu ý rằng định nghĩa <
, nhưng các nhà điều hành >
đơn giản flips giá trị kết quả).
gì các nhà điều hành làm là cố gắng để chuyển đổi cả hai toán hạng để loại nguyên thủy, với một sở thích cho con số:
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).
Trong trường hợp của chúng tôi, x === stream.getChar()
và y === ' '
.Kể từ khi cả hai toán hạng là chuỗi nguyên thủy đã có, mà kết quả trong các giá trị ban đầu (px = x, py = y
), và chúng tôi chuyển sang:
4. Else, both px and py are Strings
Bây giờ nó kiểm tra xem nếu một trong các toán hạng là các tiền tố của người kia, ví dụ:
'abc' > 'abcd' // false
'foo' > 'foobar' // false
Đó là liên quan nếu getChar()
kết quả trong một không gian, kể từ khi không gian là tiền tố của bản thân:
' ' > ' ' // false
Chúng tôi di chuyển trên, để tìm kiếm các ký tự đầu tiên trong x
và y
người đang ở trên cùng một vị trí trong chuỗi, nhưng là nhân vật khác nhau:
Cho k là số nguyên dương nhỏ nhất như vậy mà nhân vật ở vị trí k trong vòng px là khác với nhân vật ở vị trí k trong py. (Có phải là ak như vậy, cho không phải String là một tiền tố của người kia.)
(ví dụ, 'efg'
và 'efh'
, chúng tôi muốn g
và h
)
Các nhân vật chúng tôi đã tìm thấy sau đó được chuyển đổi các giá trị số nguyên của họ:
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.
Và cuối cùng, một so sánh được thực hiện:
If m < n, return true. Otherwise, return false.
Và đó là cách nó được so sánh với không gian.
tl; dr Nó chuyển đổi cả hai đối số sang biểu diễn số nguyên đơn vị mã và so sánh điều đó.
Bây giờ mọi thứ được giải thích bạn phải nói cho chúng tôi biết thêm một chút về nền tảng của tất cả điều này, tôi tò mò muốn biết tại sao một người nào đó sẽ kiểm tra xem – Sebas