9

この "9">"099" が true を返し、"9">"99" が false を返すことを理解するのに混乱しています (9 は単なる例です。"x">"xabc" が false を返し、"x"> が返されるように発生しています)。 "abc" は true を返します。ここで、a は x より小さく、abc は x よりも大きく、a、b、c、x は数値です)。前もって感謝します。

4

2 に答える 2

13

"x">"xabc" は true を返し、"x">"abc" は false を返します。ここで、a は x より小さいが、abc は x よりも大きく、a、b、c、x は数値です)

はい (ただし、"abc"はより大きくなく"x"数字ではなく文字です)。これはテキスト比較です。文字列内の数値は、比較する前に数値に変換されません。したがって、比較は文字ごとに機能し、最初に違いが見つかった時点で停止します。あなたの"99" > "099"場合、"9"左側の文字列の は"0"右側の文字列の よりも大きいため、結果は最初の文字だけで決まります。(は よりも大きい"x" > "abc"ため、で同じことが起こります。)"x""a"

以下の間には非常に大きな違いがあることに注意してください。

console.log("99" > "099"); // "true"

console.log(99 > "099"); // "false"

後者の場合、オペランドの 1 つが数値であるため、JavaScript エンジンはもう一方のオペランドを数値に変換してから数値を比較しようとします。前者の場合、両方のオペランドが文字列であるため、テキスト比較を行いません。

0補足: (「099」など)で始まる数値文字列には注意してください。暗黙的に数値に変換された場合、使用している JavaScript エンジンによっては 8 進数 (基数 8) として扱われる場合があります。

于 2013-02-21T12:06:32.963 に答える
3

x>abcより大きい値をx持っている ため、true を返しますasciia

butx>xbcは false ですxが、ascii値は に等しいですxが、両方の文字列の 2 番目の文字については、最初の文字列には 1 文字xしかありませんが、2 番目の文字列xbcには2 番目の文字がありbます..

x>abc

xは と比較されa、最初の文字の位置xが より大きい場合はaを返します。true

2 番目の例ではx>xbc、firstxが と比較され、どちらも同じ ascii 値を持っているため、xが返されます。0

しかし、それからbと比較され""ます 以来"x"しか持って"x"いません2 番目の文字として持っています.. 存在しているのでよりも大きいです"xbc""b"xbx

だから戻ってくるfalse

于 2013-02-21T12:12:15.597 に答える