web-dev-qa-db-ja.com

文字列「11」が文字列「3」よりも小さいのはなぜですか?

if ('11' < '3') alert('true');

それらを長さで比較するのではなく、エンコーディングで比較するのは明らかです。しかし、私はそれがどのように機能するか理解していません。説明が必要です:-)

24
jilseego

文字列は比較されます lexicographicaly 。つまり、等しくないか、比較する文字がなくなるまで、1文字ずつです。 「11」の最初の文字が「3」の最初の文字よりも小さい。

> '11' < '3'
true
> '31' < '3'
false
> '31' < '32'
true
> '31' < '30'
false

文字を使用する場合、ba以上であるため、abcaaa以上ですが、cd未満、abcabd未満です。

> 'abc' < 'aaa'
false
> 'abc' < 'abd'
true

文字列を明示的に数値に変換できます:

> +'11' < '3'
false
45
Quentin

デフォルトでは、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
4
Ja͢ck

多くのプログラミング言語では、文字列は 辞書式 として比較されます。確認できます アルファベット順

4
Ramesh Kotha

各文字で比較すると、以下はfalseになります。

if ('41' < '3') alert('true');

43以上です。つまり、基本的には次のように要約されます。

if ('1' < '3') alert('true'); // true
3
Sarfraz

'1' < '3'と、最初の文字が「最も重要な文字」であるため(この用語は意味をなさない)。以下の文字は比較されなくなります。

2
ThiefMaster

文字列比較として扱われました。したがって、1 <3(2つの文字列の最初の文字)、次に文字列11は文字列3に進みます

0
Rajasekhar