JavaScript | 文字列比較のルール

JavaScript JavaScript
スポンサーリンク

JavaScriptにおける文字列比較のルール

文字列比較は数値と違って「辞書順(アルファベット順)」や「文字コード(Unicode)」に基づくため、初心者がつまずきやすいポイントです。詳しく整理してみましょう。


1. 基本は「辞書順」

  • 文字列は 左から1文字ずつ Unicodeのコード番号で比較されます。
  • 先頭の文字が異なれば、その時点で大小が決まります。
  • 先頭が同じなら、次の文字を比べます。
console.log("apple" < "banana"); // true (a と b を比較 → a が先)
console.log("cat" > "car");      // true (ca は同じ、3文字目 t > r)
JavaScript

2. 大文字と小文字の違い

  • 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" が途中で終わる)
JavaScript

4. 数字っぽい文字列の比較

  • 文字列同士なら「数値」ではなく「文字コード」で比較されます。
  • "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)
JavaScript

5. 国際化や日本語の比較

  • 日本語やアクセント付き文字も Unicode順で比較されます。
  • ただし「五十音順」や「辞書順」とは必ずしも一致しません。
  • 文化的な並び順で比較したい場合は localeCompare() を使います。
console.log("あ" < "い"); // true (Unicode的にも順序通り)
console.log("ä".localeCompare("z", "de")); // ドイツ語ルールで比較
JavaScript

まとめ

  • 文字列比較は Unicodeのコード番号順
  • 大文字と小文字は別物(大文字 < 小文字)。
  • 数字っぽい文字列も「文字列」として比べると直感と違う結果になる。
  • 文化的な辞書順を使いたいなら localeCompare() を活用。

練習問題

  1. "Zoo" < "apple" の結果は?
  2. "10" > "2" の結果は?
  3. "car" < "cart" の結果は?
  4. "あい" < "あお" の結果は?

練習問題の答え

  1. "Zoo" < "apple"
    true
    理由: 'Z' のコードは 90、'a' は 97。90 < 97 なので true。
  2. "10" > "2"
    false
    理由: 文字列同士の比較は先頭文字で判断。'1' (49) と '2' (50) を比べるので '1' < '2' → false。
  3. "car" < "cart"
    true
    理由: 先頭3文字は同じ。短い方(”car”)が小さいと判定される。
  4. "あい" < "あお"
    false
    理由: 先頭の「あ」は同じ。次の文字で比較 → 'い' (U+3044) と 'お' (U+304A)。 Unicodeでは 'い'(3044) < 'お'(304A) → つまり "あい" の方が小さい。 したがって "あい" < "あお"true

タイトルとURLをコピーしました