if ('11' < '3') alert('true');
長さではなく、エンコードによって比較していることは明らかです。しかし、私はそれがどのように機能するのか理解していません。説明が必要です:-)
if ('11' < '3') alert('true');
長さではなく、エンコードによって比較していることは明らかです。しかし、私はそれがどのように機能するのか理解していません。説明が必要です:-)
文字列は辞書式に比較されます。つまり、文字が等しくなくなるまで、または比較する文字がなくなるまで、文字ごとに比較します。'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 つの文字列を比較します。strcmp()
Cでの動作とよく似ています。
比較を機能させるには、どちらかの側を数値にキャストして、数値比較の意図をインタープリターに伝えることができます。
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 に先行します。