2012-03-25 36 views
1

顯然,下面的javascript打印爲TRUE。JavaScript字符串比較的基礎是什麼?

var s = "hippo"; 
var t = "Hippo"; 
var test = (s > t); 
document.write(test ? "TRUE" : "FALSE");​ 

什麼讓「河馬」比「河馬」大? H的ASCII值大於h的ASCII值。

什麼是JavaScript字符串比較的邏輯基礎?

http://jsfiddle.net/dUadG/1/

+3

任何小寫字母的ASCII值是大寫字母加上32的ASCII值。「H」是72,而「h」是104! – Gabe 2012-03-25 19:42:46

+2

「* H的ASCII值大於h的ASCII值*」 - 再次檢查... – 2012-03-25 19:44:44

回答

1

字典順序,我們一般要小寫來大寫後,這樣的專有名詞出現第一。我想這不一定是這樣的;這只是英語使用者AFAIK的慣例。字符串中的「X大於Y」表示「X在Y後出現在字典中」。所以這並不意外。

2

這不是ASCII,但UTF-16:

ECMAScript的源文本表示爲Unicode字符編碼,3.0或更高版本的字符序列。正如Unicode技術報告#15中所描述的那樣,文本預計將被規範化爲Unicode規範化表單C(規範組合)。遵從ECMAScript實現並不需要執行任何文本規範化,或者表現得好像他們自己正在執行文本規範化一樣。就本規範而言,假定ECMAScript源文本是一個16位代碼單元序列。這樣的源文本可能包含16位代碼單元的序列,這些代碼單元不是有效的UTF-16字符編碼。如果實際源文本以16位代碼單元以外的形式編碼,則必須按照首先轉換爲UTF-16的方式進行處理。

http://es5.github.com/#x6

相關搜索:

'h'.charCodeAt(0); 
'H'.charCodeAt(0); 
+0

「*它不是ASCII碼,但是UTF-16 *」 - 爲什麼相關?兩者都使用相同的字符相同的代碼... – 2012-03-25 19:48:50

+1

這是相關的,因爲OP認爲它是ASCII。 – 2012-03-25 19:50:44

+0

問題是關於一般比較算法,而不僅僅是那個特定的情況。 – user123444555621 2012-03-25 19:52:33

相關問題