2012-03-25 8 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値は、大文字のASCII値に32を加えたものです。 'H'は72、' h'は104です! – Gabe

+2

"* HのASCII値がhのASCII値より大きい*" - 再度チェック... –

答えて

1

を、我々は一般的に、適切な名前が最初に表示されるように、小文字は大文字の後に来てほしいです。私はそうである必要はないと思います。それは英語の話し手AFAIKのためのちょうどコンベンションです。文字列中の "Xより大きい"とは、 "XはYの後の辞書に現れます"を意味します。これは予期しないことではありません。

2

それはASCIIではないですが、UTF-16:

のECMAScriptソーステキストは、バージョン3.0以降、Unicode文字エンコーディングの文字列で表現されます。テキストは、Unicode Technical Report#15に記載されているように、Unicode正規化されたForm C(標準的な構成)に正規化されていることが期待されます。適合するECMAScriptの実装は、テキストの正規化を実行する必要はなく、あたかもテキストの正規化を行っているかのように動作します。 ECMAScriptソーステキストは、本明細書の目的上、16ビットコードユニットのシーケンスであると仮定される。そのようなソーステキストは、有効なUTF-16文字符号化ではない16ビットコードユニットのシーケンスを含むことができる。実際のソーステキストが16ビットコード単位以外の形式でエンコードされている場合は、最初にUTF-16に変換されたかのように処理する必要があります。

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

関連検索:を注文辞書で

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

"* ASCIIではありませんが、UTF-16 *" - それはなぜ関係していますか?どちらも同じ文字に同じコードを使用します... –

+1

OPはそれがASCIIだと思うので意味があります。 –

+0

問題は、その特定のケースだけでなく、一般的な比較アルゴリズムに関するものでした。 – user123444555621