この "9">"099" が true を返し、"9">"99" が false を返すことを理解するのに混乱しています (9 は単なる例です。"x">"xabc" が false を返し、"x"> が返されるように発生しています)。 "abc" は true を返します。ここで、a は x より小さく、abc は x よりも大きく、a、b、c、x は数値です)。前もって感謝します。
2 に答える
"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) として扱われる場合があります。
x>abc
より大きい値をx
持っている ため、true を返しますascii
a
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"
xb
x
だから戻ってくるfalse