undefined
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
グローバルのundefined
プロパティはプリミティブ値のundefined
を表します。これは JavaScript におけるプリミティブ型の一つです。
undefined のプロパティ属性 | |
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
試してみましょう
function test(t) { if (t === undefined) { return "Undefined value!"; } return t;}let x;console.log(test(x));// Expected output: "Undefined value!"
構文
undefined;
解説
undefined
は、グローバルオブジェクトのプロパティです。すなわちグローバルスコープ内の変数です。undefined
の初期値はプリミティブ値であるundefined
です。
最近のブラウザー (JavaScript 1.8.5 / Firefox 4 以降) でのundefined
は、 ECMAScript 5 仕様により、設定不可、書込不可のプロパティとなります。 (そうでない場合でも、上書きは避けてください。)
まだ値が代入されていない変数はundefined
型となります。評価しようとしている変数に値が代入されていない場合、メソッドや文もundefined
を返します。値をreturn
しない関数もundefined
を返します。
メモ:グローバルスコープ以外のスコープではundefined
を識別子 (変数名) として使うことができますが (undefined
は予約語でないため)、コードの管理やデバッグが困難になるためおすすめできません。
//こんなことはしないこと!// "foo string" をログ出力する(function () { var undefined = "foo"; console.log(undefined, typeof undefined);})();// "foo string" をログ出力する(function (undefined) { console.log(undefined, typeof undefined);})("foo");
例
厳密等価と undefined
undefined
と厳密等価・非等価演算子を使って、変数に値があるか調べることができます。次のコードでは、変数x
が定義されていないため、if
文は true に評価されます。
var x;if (x === undefined) { // ここの文は実行される} else { // ここの文は実行されない}
メモ:ここでは、標準の等価演算子ではなく厳密等価演算子を使わないといけません。厳密等価演算子とは違い、x == undefined
は、x
がnull
であるかどうかもチェックするからです。null
はundefined
と等しくありません。
詳しくは、比較演算子を参照してください。
typeof 演算子と undefined
代わりに、typeof
を使用することができます。
var x;if (typeof x === "undefined") { // ここの文は実行される}
typeof
を使う理由の一つとして、こちらは変数が宣言されていなくてもエラーにはなりません。
// 直前まで x は宣言されていないif (typeof x === "undefined") { // エラーなしで true と評価される // ここの文は実行される}if (x === undefined) { // ReferenceError が発生}
しかし、もう一つの選択肢があります。 JavaScript は静的にスコープされた言語なので、変数が宣言されているかどうかを知るには、それが含まれるコンテキストで宣言されているかどうかを見ることで読み取ることができます。
グローバルスコープはグローバルオブジェクトに結びつけられているので、グローバルコンテキストに変数が存在するかどうかのチェックは、グローバルオブジェクトにプロパティが存在することを、in
演算子を使用してチェックすることで行うことができます。
if ("x" in window) { // x がグローバルに定義されている場合のみ、ここの文を実行}
void 演算子と undefined
3 つ目の方法として、void
演算子があります。
var x;if (x === void 0) { // ここの文は実行される}// 直前まで y は宣言されていないif (y === void 0) { // ReferenceError: y is not defined が発生}
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-undefined |