if ('11' < '3') alert('true');
それらを長さで比較するのではなく、エンコーディングで比較するのは明らかです。しかし、私はそれがどのように機能するか理解していません。説明が必要です:-)
文字列は比較されます lexicographicaly 。つまり、等しくないか、比較する文字がなくなるまで、1文字ずつです。 「11」の最初の文字が「3」の最初の文字よりも小さい。
> '11' < '3'
true
> '31' < '3'
false
> '31' < '32'
true
> '31' < '30'
false
文字を使用する場合、b
はa
以上であるため、abc
はaaa
以上ですが、c
はd
未満、abc
はabd
未満です。
> 'abc' < 'aaa'
false
> 'abc' < 'abd'
true
文字列を明示的に数値に変換できます:
> +'11' < '3'
false
デフォルトでは、JavaScriptは2つの文字列を各文字の序数値で比較します。 Cでのstrcmp()
の動作によく似ています。
比較を機能させるには、どちらかの側を数値にキャストして、数値比較の意図をインタープリターに伝えます。
Number('11') < '3' // false
+'11' < '3' // false, using + to coerce '11' to a numeric
'11' < Number('3') // false
'11' < +'3' // false
各文字で比較すると、以下はfalse
になります。
if ('41' < '3') alert('true');
4
は3
以上です。つまり、基本的には次のように要約されます。
if ('1' < '3') alert('true'); // true
'1' < '3'
と、最初の文字が「最も重要な文字」であるため(この用語は意味をなさない)。以下の文字は比較されなくなります。
文字列比較として扱われました。したがって、1 <3(2つの文字列の最初の文字)、次に文字列11は文字列3に進みます