2013-03-08 73 views
7

Tôi cố gắng để hiểu biểu thức này:Toán tử Javascript '>' so sánh các ký tự với khoảng trắng như thế nào?

((ch = stream.getChar()) > ' ') 

Ở đây, getChar() được một nhân vật. Làm thế nào để toán tử so sánh lớn hơn này kiểm tra xem có bất kỳ char nào lớn hơn một khoảng trống không?

Điều này có khả thi không?

+0

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

Trả lời

11

Một không gian trống có một mã ký tự. Mặc dù nó không giống như nhiều, nó vẫn có một giá trị. Vì vậy, các nhân vật lấy từ dòng. So sánh các mã ký tự của các giá trị này là những gì tạo ra đầu ra.

+0

khi so sánh 2 chuỗi này là mã ký tự của chúng được so sánh? – Sebas

+0

Có, khi so sánh các chuỗi là so sánh mã ký tự của chúng. – christopher

+0

'file_2013_03_01.txt'> 'file_2013_02_01.txt' vì mã char của chuỗi đầu tiên cao hơn số thứ hai? Làm thế nào để nó thậm chí được tính toán ... – Sebas

1

[string] > [string] sẽ so sánh các nhân vật (s) bởi các giá trị đại diện của họ (xem ASCII Table)

+2

Anh ấy hỏi về toán tử>. – deadlock

+0

@dreadlock: cảm ơn - bạn đã đúng! bỏ lỡ điều đó. Tôi sẽ thay đổi câu trả lời của tôi. – simplyray

+0

Đã cập nhật câu trả lời trước đây của tôi – simplyray

0

Ký tự được lưu trữ trong bộ nhớ của máy tính dưới dạng một số (thường là một hoặc hai byte).

Mỗi ký tự có một số nhận dạng duy nhất.

Bằng cách kiểm tra xem ký tự có lớn hơn không gian không, bạn thực sự comapare vị trí của chúng trong bảng.

Xem http://en.wikipedia.org/wiki/ASCII để biết thêm.

3

Trong chuỗi Javascript được so sánh theo thứ tự bảng chữ cái. Các biểu thức này là đúng:

'abacus' <= 'calculator' 
'abacus' < 'abate' 
+0

Tuy nhiên ''#b' <'~ a''. Thứ tự chữ cái không bao gồm nó. – jazzpi

0

Kiểm tra liên kết này, nó sẽ giải thích cách so sánh hoạt động trên JS: http://javascript.about.com/od/decisionmaking/a/des02.htm Về cơ bản, bạn đang so sánh giá trị ASCII của từng nhân vật với giá trị ASCII của không gian trống , cũng là một ký tự và do đó, có một giá trị ASCII tương ứng.

2

Trong hầu hết các ngôn ngữ lập trình (nếu không phải tất cả), các ký tự được biểu diễn nội bộ theo một số. Khi bạn làm bình đẳng/lớn hơn/ít hơn kiểm tra những gì bạn đang thực sự kiểm tra là số cơ bản.

do đó trong JS:

alert('c' > 'b'); // alerts true 
alert('a' > 'b'); // alerts false 

Một nhân vật không gian cũng có một số đại diện, do đó việc kiểm tra là một trong những hợp lệ.

+0

Nhưng điều này bắt đầu trở nên kỳ lạ khi bạn nhận được quyền sử dụng đất UTF-8? Có thể so sánh các ký tự chữ cái quốc tế không? – CMCDragonkai

9

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()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 xy 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''efh', chúng tôi muốn gh)

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 đó.

Các vấn đề liên quan