【入門編】 比較演算子 (<, >, <=, >=) の型変換 – JavaScript実践ガイド

JavaScriptの世界へようこそ。フロントエンドの現場で長年戦ってきた身から言わせてもらうと、この言語は時に「優しすぎるあまり、お節介を焼いてくる友人」のような存在です。

特に比較演算子(`<`, `>`, `<=`, `>=`)の挙動は、初心者が最初に「えっ、なんでこうなるの!?」と頭を抱えるポイントの筆頭株。今日は、この「JavaScriptの気まぐれな優しさ」の正体を、一緒に紐解いていきましょう。

—

1. 比較演算子は「翻訳機」を働かせている

JavaScriptで `5 > 3` と書けば、誰もが「5の方が大きいよね」と納得します。でも、JavaScriptは裏で必死に「翻訳」を行っているんです。

例えば `10 > “2”` を比較するとき、JavaScriptは「片方が数字で片方が文字?…よし、とりあえず両方を数字に変換して比較しよう!」という気を利かせます。

なぜ「暗黙の型変換」が起こるのか

JavaScriptは、どんなデータ同士でも比較できるように、常に変換ルールを持っています。お買い物に例えるなら、「10円玉」と「10枚つづりのチケット」を比べるために、チケットを「いくら相当か」という数値に換算してから比較するようなものです。

// 数字と文字列の比較
console.log(10 > “2”); // true (文字列の”2″が数値の2に変換される)

// もっと極端な例
console.log(5 > “apple”); // false
// なぜfalse? “apple”を数字に変換しようとすると「数値じゃないよ!」という「NaN (Not a Number)」になるから。
// どんな数字もNaNより大きくないし小さくないので、結果は常にfalseになります。

—

2. 数値比較 vs 辞書順比較:運命の分かれ道

ここで一つ、一番重要なルールを伝授します。
「両方が文字列」の場合だけ、数値変換ではなく「辞書順(文字コード順)」の比較に切り替わるんです。

これが初心者泣かせの最大の罠です。

// 両方とも文字列だと、辞書順になる
console.log(“10” > “2”); // false

「えっ、10の方が2より大きいはずじゃん!」と思いますよね。でも、辞書順では「1」から始まる「10」と「2」を比べたとき、先頭の文字同士を比較して「2の方が1より大きい」と判断されてしまうんです。

  • 数値として比較したいとき: 両方を `Number()` で囲うか、`+` をつけて数字に変換する癖をつけましょう。
  • 文字列として比較したいとき: そのままでOKですが、桁数が違うと予期せぬ結果になるので注意が必要です。

—

3. 実践:現場で身を守るためのコード

現場では「うっかりバグ」を避けるために、こんなふうに書くのがスマートです。

const inputVal = “10”; // ユーザーが入力した値は、だいたい文字列として渡ってきます

// 比較する前に、自分で「数値だよ!」と宣言してあげる(明示的な変換)
if (Number(inputVal) > 2) {
console.log(“ちゃんと数値として10より大きいと判定できました!”);
}

// 逆に、意図せず文字列同士で比較してしまわないように注意!
const a = “100”;
const b = “20”;
console.log(a > b); // false (辞書順だから!怖いですね)

—

最後に:失敗しても大丈夫

JavaScriptのこの挙動は、ベテランのエンジニアでもたまに間違えます。だからこそ、現場では「比較するときは型を揃える」という鉄の掟があります。

もしコードが期待通りに動かなくても、自分を責めないでください。「ああ、JavaScript君がまたお節介を焼いて、型変換をしてくれたんだな」と、優しく受け止めてあげればいいんです。

まずは、`console.log()` で確認する癖をつけること。それが、伝説のアーキテクトへの第一歩です。何か分からないことがあったら、いつでもまた聞きに来てくださいね。あなたの挑戦を、心から応援しています!

コメント

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