【ぬるとあんでふぁいんど】
null と undefined とは?
最終更新:
💡 どちらも値の不在に使うけれど、同じ値ではない
JavaScriptで、値の不在を扱うために使われる別々のプリミティブ値。undefinedは値を設定していない変数や存在しないプロパティなどで現れ、nullは対象がないことを明示するために使われる。どちらもコードから代入できる。
📌 このページのポイント
- let x; を実行した後のxや、存在しないプロパティはundefined
- nullは対象がないことを明示する値で、APIが返すこともある
- null === undefined はfalse。typeof nullは仕様上 "object"
- ?. と ?? はJavaScriptでも使え、nullとundefinedをまとめて扱える
どう違うの?
let x; の実行後のxや、存在しないプロパティの値はundefinedになるよ。nullは「対象なし」を明示する場面で使う。たとえばdocument.querySelectorは、要素が見つからなければnullを返すんだ。
undefinedは自分で代入できないの?
どうやって見分けるの?
value === null と value === undefined で個別に比較できるよ。null === undefined はfalse。typeof undefined は "undefined" だけれど、typeof null は歴史的な仕様で "object" になる。null自体がオブジェクトという意味ではないんだ。
値がないときに備える書き方はある?
JavaScriptの user?.name は、userがnullかundefinedならundefinedを返すよ。value ?? 代わりの値 は、その2つの場合だけ代わりを使う。0 ?? 10 は0のまま。if文では0や空文字列もfalse扱いになるので、値がないかの判定とは区別しよう。
TypeScriptも助けてくれる?
strictNullChecksを有効にすると、nullやundefinedを別の型として扱うよ。たとえば検索結果がundefinedかもしれないのに、そのプロパティをすぐ読むと型エラーになる。値があることを確認してから使うなど、必要な処理をコードに表すんだ。
まとめ:ざっくりこれだけ覚えればOK!
「null と undefined」って出てきたら「値の不在に使われる、JavaScriptの別々の値」と思えばだいたいOK!
📖 おまけ:英語の意味
「null / undefined」 = 対象がないこと / 未定義
💬 JavaScriptでは、どちらも独立したプリミティブ値として扱うよ。変数そのものを宣言していないこととは区別しよう。