私はこの表現を理解しようとしています:Javascriptの '>'演算子は文字とスペースをどのように比較しますか?
ここ((ch = stream.getChar()) > ' ')
、getChar()
は文字を取得します。これは比較演算子よりもcharが空きスペースよりも大きいかどうかをどのように確認するのですか?
これは可能ですか?
私はこの表現を理解しようとしています:Javascriptの '>'演算子は文字とスペースをどのように比較しますか?
ここ((ch = stream.getChar()) > ' ')
、getChar()
は文字を取得します。これは比較演算子よりもcharが空きスペースよりも大きいかどうかをどのように確認するのですか?
これは可能ですか?
空きが文字コードを持っている(ASCII Tableを参照)、その代表値によって、文字(複数可)を比較します。それほど多くないように見えますが、それでも価値があります。キャラクターはストリームから取り出されます。これらの値の文字コードを比較すると、出力が生成されます。
を更新しましたか? – Sebas
はい、文字列の比較時に文字コードが比較されます。 – christopher
'file_2013_03_01.txt'> 'file_2013_02_01.txt'は、最初の文字列のcharコードが2番目の文字コードよりも高いためですか?どのように計算されていますか? – Sebas
文字はコンピュータのメモリに数値(通常は1バイトまたは2バイト)として格納されます。
各文字には固有の識別番号があります。
文字がスペースよりも大きいかどうかを確認することで、実際にはテーブルの中にそれらの場所を混在させることができます。
http://en.wikipedia.org/wiki/ASCIIを参照してください。
アルファベット順にJavaScript文字列が比較されます。これらの式は真である:
'abacus' <= 'calculator'
'abacus' < 'abate'
しかし '' #b '<'〜a''。アルファベット順ではカバーできません。 – jazzpi
は、比較はJSにどのように動作するかを説明しましょう、このリンクをチェックアウト:http://javascript.about.com/od/decisionmaking/a/des02.htm は基本的に、あなたが空白のASCII値に各文字のASCII値を比較していますこれも文字であるため、対応するASCII値を持ちます。
ほとんどの(すべてではないが)プログラミング言語では、文字は内部的に数字で表されます。あなたが等しいかより大きいかより小さいチェックをしているとき、あなたが実際にチェックしているものは基本的な数字です。 JSでそれゆえ
:
alert('c' > 'b'); // alerts true
alert('a' > 'b'); // alerts false
空白文字も、そのためのチェックが有効なもので、数値表現があります。
しかし、UTF-8の土地に入るとこれは変なことになりますか?国際的なアルファベット文字を比較することは可能ですか? – CMCDragonkai
はのは、(アルゴリズム自体はhereに記載されている。)(それは<
を定義していますが、>
オペレータは、単に結果の値を反転することに注意してください)language specificationでチラッと見てみましょう。
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).
我々の場合には
、x === stream.getChar()
とy === ' '
を:オペレータは何
は数字を優先して、プリミティブ型に両方のオペランドを変換しようとしています。オペランドの両方が元の値(px = x, py = y
)をもたらし、我々はに移ることを、すでに原始的な文字列であるので:
4. Else, both px and py are Strings
が今では、オペランドのいずれかが他のプレフィックスあるかどうかを確認するためのチェックを行い、
' ' > ' ' // false
我々が移動します。例:スペースでgetChar()
結果、スペースが自身の接頭辞であるからであれば関連性がある
'abc' > 'abcd' // false
'foo' > 'foobar' // false
kはピクセル内の位置kの文字があるような最小の正の整数とする:文字列内の同じ位置にしているが、異なる文字でx
とy
の最初の文字を見つけるための、上py内の位置kの文字とは異なります。 (どちらの文字列は、他の接頭語であるため、そのようAKが存在する必要があります。)
私たちはその後、変換されたことがわかりました文字(たとえば、'efg'
と'efh'
を、我々はg
と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.
そして最後に、比較が行われます
If m < n, return true. Otherwise, return false.
それはそれが空間とどのように比較されるかです。
tl; dr両方の引数をコード単位の整数表現に変換して比較します。
これですべての背景をもう少し私たちに伝えなければならないことを説明したので、なぜ誰かがそれを確認する理由が分かりました – Sebas