こんにちは。JavaScriptの世界へようこそ。
日々コードを書いていると、「あれ、何でこうなるの?」と首を傾げたくなる不思議な現象に出会うことがありますよね。
今日は、JavaScriptの伝説的な「ちょっとした失敗談」とも言える、`typeof null` が `object` を返してしまうというお話です。
「えっ、`null` って『何もない』って意味じゃないの? なんで『オブジェクト(物)』になっちゃうの?」
そう思ったあなた、その感覚こそが正常です!この現象、実はJavaScriptが生まれた1995年からの「歴史的な忘れ物」のようなものなんです。一緒に紐解いていきましょう。
—
1. 「箱の中身」を調べる `typeof` くん
まず、`typeof` という道具についておさらいしましょう。これは、目の前にあるデータが「数字なのか、文字なのか、それとも物(オブジェクト)なのか」を教えてくれる、いわば「中身判定機」です。
console.log(typeof 123); // “number”(数字だね!)
console.log(typeof “こんにちは”); // “string”(文字だね!)
console.log(typeof {}); // “object”(何かの中身が入った箱だね!)
ここまでは順調です。では、本題の `null` を調べてみると……?
console.log(typeof null); // “object” …あれ?
……えっ、「何もない(null)」はずなのに、「物(object)」と判定されてしまいました。これはバグなの? と思いますよね。
実はこれ、JavaScriptが生まれたばかりの頃の「設計ミス」がそのまま残ってしまっているのです。今から直そうとすると、世界中の何億行というプログラムが動かなくなってしまうため、もはや「仕様」として受け入れられている、いわば「愛嬌のある欠点」なのです。
—
2. なぜ「物(object)」と間違えられたのか?
少しだけ裏話をしましょう。JavaScriptの最初期、データは「型を示すタグ」と「値そのもの」を組み合わせて管理されていました。
当時のJavaScriptでは、「物(オブジェクト)」は内部的に `0` というフラグで表現されていたんです。そして、偶然にも「何もない(null)」というデータも、ビット単位で見るとすべてが `0` で構成されていた。
「おっと、どちらも `0` だから、君はオブジェクトの仲間だね!」
そんなふうに、当時の判定機が勘違いしてしまったのが原因です。プログラミングの歴史には、こんなふうに「昔の勢いで決まったことが、大人になっても直せない」というドラマが意外とたくさんあるんですよ。
—
3. どうやって「正しく」判定すればいいの?
さて、バグだと分かっても、JavaScriptを書いている以上はこの「罠」を避けて通らなければなりません。特に「データがちゃんと入っているか」を確認したいとき、`typeof` だけを頼りにするのは危険です。
そこで、現場のエンジニアがよく使う「最強のチェック方法」を伝授しますね。
一番シンプルで確実な方法
`null` は「空っぽ」であることを示す特別な存在なので、「`===`(厳密等価演算子)」を使って直接比べるのが一番です。
const myData = null;
// typeof に頼らず、直接「君は null かい?」と聞く
if (myData === null) {
console.log(“安心してください、中身は空っぽです!”);
} else {
console.log(“何かデータが入っていますね。”);
}
もっと短く書くなら(実務のテクニック)
もし「データが空っぽじゃない(nullでもundefinedでもない)時だけ処理したい」という場合は、こんな書き方もよくします。
const value = “JavaScript”;
// null や undefined は「偽(false)」として扱われる性質を利用する
if (value) {
console.log(“データが入っています!”);
} else {
console.log(“空っぽです…”);
}
—
最後に:つまずいても大丈夫ですよ
「えー、言語の仕様が間違ってるなんて、JavaScriptって適当なの?」と感じたかもしれませんね。でも、安心してください。
世界中のトップエンジニアたちも、この `typeof null` の挙動には何度も泣かされてきました。これはあなたの知識が足りないからではなく、「JavaScriptという言語の歴史を深く知っている証拠」なのです。
プログラミングをしていると、こうした「おや?」と思うことに出会うはずです。でも、そのたびに「なぜこうなっているんだろう?」と立ち止まって調べるあなたは、すでに立派なエンジニアの素質を持っています。
完璧な道具なんてありません。少し癖のあるこのJavaScriptという相棒と、これからも仲良く、楽しくコードを書いていきましょうね!
もしまた何か分からないことがあったら、いつでもここへ帰ってきてください。大丈夫、一つずつ解決していけば必ず書けるようになりますよ。

コメント