JavaScriptにおける文字列比較のルール
文字列比較は数値と違って「辞書順(アルファベット順)」や「文字コード(Unicode)」に基づくため、初心者がつまずきやすいポイントです。詳しく整理してみましょう。
1. 基本は「辞書順」
- 文字列は 左から1文字ずつ Unicodeのコード番号で比較されます。
- 先頭の文字が異なれば、その時点で大小が決まります。
- 先頭が同じなら、次の文字を比べます。
console.log("apple" < "banana"); // true (a と b を比較 → a が先)
console.log("cat" > "car"); // true (ca は同じ、3文字目 t > r)
JavaScript2. 大文字と小文字の違い
- Unicodeでは 大文字 < 小文字 という順序になります。
- 例:
'A'(65) と'a'(97) →'A' < 'a'は true。
console.log("Zoo" < "apple"); // true (Z=90, a=97 → Z < a)
console.log("a" > "Z"); // true (97 > 90)
JavaScript👉 つまり「辞書順」といっても、普段の国語辞典の並びとは違うことがあるので注意。
3. 文字列の長さが違う場合
- 先頭から比べて同じ文字が続き、短い方が先に終わったら、短い方が小さいと判定されます。
console.log("car" < "cart"); // true ("car" が途中で終わる)
JavaScript4. 数字っぽい文字列の比較
- 文字列同士なら「数値」ではなく「文字コード」で比較されます。
"10"と"2"を比べると、先頭の"1"と"2"を比べるので"10" < "2"になります。
console.log("10" < "2"); // true ('1' < '2')
JavaScript👉 数値として比べたいなら Number() で変換しましょう。
console.log(Number("10") < Number("2")); // false (10 < 2 は false)
JavaScript5. 国際化や日本語の比較
- 日本語やアクセント付き文字も Unicode順で比較されます。
- ただし「五十音順」や「辞書順」とは必ずしも一致しません。
- 文化的な並び順で比較したい場合は
localeCompare()を使います。
console.log("あ" < "い"); // true (Unicode的にも順序通り)
console.log("ä".localeCompare("z", "de")); // ドイツ語ルールで比較
JavaScriptまとめ
- 文字列比較は Unicodeのコード番号順。
- 大文字と小文字は別物(大文字 < 小文字)。
- 数字っぽい文字列も「文字列」として比べると直感と違う結果になる。
- 文化的な辞書順を使いたいなら
localeCompare()を活用。
練習問題
"Zoo" < "apple"の結果は?"10" > "2"の結果は?"car" < "cart"の結果は?"あい" < "あお"の結果は?
練習問題の答え
"Zoo" < "apple"
→ true
理由:'Z'のコードは 90、'a'は 97。90 < 97 なので true。"10" > "2"
→ false
理由: 文字列同士の比較は先頭文字で判断。'1'(49) と'2'(50) を比べるので'1' < '2'→ false。"car" < "cart"
→ true
理由: 先頭3文字は同じ。短い方(”car”)が小さいと判定される。"あい" < "あお"
→ false
理由: 先頭の「あ」は同じ。次の文字で比較 →'い'(U+3044) と'お'(U+304A)。 Unicodeでは'い'(3044)<'お'(304A)→ つまり"あい"の方が小さい。 したがって"あい" < "あお"は true。
