できない.dev

undefined

別名: 未定義値 / undefined 値

JavaScript で「値がまだ入っていない」ことを表すプリミティブ値。
未代入の変数、存在しないプロパティ、return の無い関数の戻り値がこれになる。
意図的な「空」を表す null とは別物である。

公開:

定義

undefined は、JavaScript が「値が入っていない」状態を表すために用意しているプリミティブ値である。MDN(新しいタブで開く) は、値を代入していない変数、値を返さない関数の戻り値、存在しないプロパティへのアクセスがいずれも undefined になると説明している。
プログラマが明示的に置く「空」である null と違い、undefined は言語側が自動的に与える値だと捉えるとよい。

詳細

typeof x === "undefined" は x が宣言されていなくても例外にならないため、存在が不確かな変数の検査に使える。
一方 x == undefined は緩い等価比較で null にも一致するので、undefined だけを区別したいときは === を使う。TypeScript では string | undefined のように型として現れ、strictNullChecks 下ではそのまま使うとエラーになる。
環境変数は未設定だと process.env.FOO が undefined になり、文字列連結すると "undefined" という文字列に化けて気づきにくい。

よくある誤解

  • null と undefined は同じもの: 緩い比較では等しいが、JSON.stringify は undefined のプロパティを落とし null は残すなど、扱いは異なる。
  • undefined を代入すれば「未定義」に戻る: プロパティは存在したままで、in 演算子や Object.keys には現れる。
    消したいなら delete を使う。

関連

controlled / uncontrolled input の警告 は value が undefined から文字列へ変わるときに出る。Object is possibly 'null' は undefined を含む型の絞り込みの話である。

この記事は役立ちましたか?