コンテンツにスキップ

JavaScript/typeof null

出典: フリー教科書『ウィキブックス(Wikibooks)』

typeof null

[編集]

typeof null は、JavaScriptにおいて特殊なケースで、null に対して typeof 演算子を使用した場合、"object" という値を返します。この挙動は言語仕様に由来するもので、しばしば混乱を招くポイントの一つです。

特徴

[編集]
  • null は、JavaScriptにおけるプリミティブ型で、明示的に「値がない」状態を表します。
  • 通常、typeof 演算子を使用すると値の型が返されますが、typeof null の結果は "object" になります。
  • この挙動は、JavaScriptの設計上の誤り(バグ)として知られていますが、互換性維持のために修正されていません。
console.log(typeof null); // "object"

歴史的背景

[編集]

typeof null"object" を返す理由は、JavaScriptの初期設計に起因します。null の内部的な表現は、低レベルのデータ構造で「ゼロ値のポインタ」として扱われており、これが object 型として分類される原因です。

実際の型チェック

[編集]

null が本質的にはプリミティブ型であることを考慮すると、値が null かどうかを正確にチェックするには、"===" 演算子を使用する必要があります。

let value = null;

console.log(typeof value); // "object"
console.log(value === null); // true

null と object の違い

[編集]
  • null はプリミティブ型であり、明示的に「空」であることを示します。
  • 一方、object は配列やオブジェクトリテラルのような複雑なデータ構造を表します。
let obj = {};
let value = null;

console.log(typeof obj);   // "object"
console.log(typeof value); // "object"(ただし、これは <code>[[JavaScript/null|null]]</code>)

typeof null に関する注意点

[編集]
  • typeof null"object" を返す挙動を考慮し、型チェックを行う際には以下の方法を採用することが推奨されます:
    • 厳密比較を使用する: `value === null`
    • 型ガードを追加する: 例えば、`value !== null && typeof value === "object"`
function isObject(value) {
  return value !== null && typeof value === "object";
}

console.log(isObject(null)); // false
console.log(isObject({}));   // true

まとめ

[編集]
  • typeof null"object" を返すのは、JavaScriptの設計上の歴史的な理由によるものです。
  • null はプリミティブ型であり、値がないことを明示的に示します。
  • 型チェックを行う際には、"===" を使用するか、明確な条件分岐を採用することが重要です。