【入門編】 厳密等価 (===) と抽象等価 (==) のアルゴリズム – JavaScript実践ガイド

JavaScriptの世界へようこそ。この言語は非常に自由で、時に「お節介」なほど親切な一面を持っています。

開発の現場で、バグの原因として最も多く、かつ初心者さんが最初に「えっ、なんで!?」と頭を抱えるポイント。それが今日お話しする「==(抽象等価)」と「===(厳密等価)」の違いです。

結論から先に言うと、現場の合言葉は「迷ったら === を使え」。これだけ覚えて帰ってもらってもいいくらいですが、なぜそうなのか、その「泥臭い舞台裏」を一緒に見ていきましょう。

—

1. 「==」は、お節介な翻訳家

まず、`==`(抽象等価演算子)についてです。こいつは、とてもお節介な性格をしています。

例えば、数字の `10` と、文字列の `”10″` を比較するとどうなると思いますか? 人間から見れば「どっちも10だよね」ですが、コンピュータは本来、数字と文字を明確に区別します。

でも、`==` はこう考えます。
「おっ、データ型が違うな。でも中身は似てるし……よし、僕が勝手に変換して合わせてあげよう!」

これを「型強制(Type Coercion)」と呼びます。以下のようなことが起きます。

// 比較してみましょう
console.log(10 == “10”); // true になる!

/
なぜか?
== が気を利かせて、文字列の “10” を数字の 10 に変換してくれたからです。
でも、この「親切」が、大規模な開発では予期せぬバグの温床になります。
/

例え話:コンビニのレジにて

想像してみてください。あなたがコンビニで「100円」のガムを買おうとしています。
`==` は、あなたの財布に入っている「100円玉(数字)」と、店員さんが渡す「100円という文字が書かれたレシート(文字列)」を「同じ価値のもの」として強引に握手させようとします。

「まあ、どっちも100円って書いてあるし、いいじゃん!」という適当さ。これが `==` の正体です。

—

2. 「===」は、潔癖な番人

対して `===`(厳密等価演算子)は、非常にストイックな性格です。

こいつは「型」と「値」の両方が完全に一致していないと、絶対に「イエス(true)」とは言いません。一切の妥協を許さない、誠実な番人です。

// 厳密にチェックします
console.log(10 === “10”); // false になる!

/
=== はこう考えます。
「左は数字、右は文字列。たとえ中身の数字が同じでも、データとしての性質が違うなら別物だ!」
/

現場のエンジニアが `===` を好むのは、「あやふやな挙動を許さないから」です。プログラムが予期せぬ型変換を勝手に行うと、後から「なんでここで `false` になるはずが `true` になってるんだ?」と原因を探すのに数時間溶かすことになります。`===` を使えば、そんな悲劇を未然に防げるのです。

—

3. なぜ「==」を使ってはいけないのか?

「型を変換してくれるなら便利じゃない?」と思ったあなた。鋭い視点です。しかし、JavaScriptの型変換ルールは非常に複雑で、慣れているプロでもミスをします。

恐ろしい例:

console.log(0 == false); // true
console.log(0 == “”); // true
console.log(“” == false); // true

見てください、このカオスを! 0も、空の文字列も、falseも、`==` にかかれば「みんな同じ!」と判定されてしまいます。こんな挙動を把握しながらコードを書くのは、精神衛生上よくありません。

—

4. 今日から意識してほしいこと

これからJavaScriptを書くときは、以下のルールを自分に課してみてください。

1. 基本は常に `===` を使う。
2. `==` を使うのは、「どうしても型を無視して比較したい時(nullとundefinedを同時にチェックしたい時など)」に限定する。

もし誰かに「なんで `===` なの?」と聞かれたら、こう答えてあげてください。
「コードの挙動をあやふやにしたくないから。型まで含めて『等しい』と言い切れる関係性だけを大切にしたいんだ」と。

最初は慣れないかもしれませんが、この「厳密さ」こそが、あなたの書くコードをより堅牢で、信頼できるものにしてくれる第一歩です。

プログラミングは、道具との付き合い方です。`==` のような「お節介なツール」に振り回されず、`===` という「誠実なパートナー」と共に、心地よいコーディングライフを楽しんでくださいね!

大丈夫、最初はみんなここでつまずきます。一つひとつ、納得しながら進んでいきましょう。

コメント

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