1. ホーム
  2. ジャバスクリプト

[解決済み】未定義のオブジェクトプロパティを検出する

2022-03-18 23:38:30

質問

JavaScriptのオブジェクトのプロパティが未定義であるかどうかを確認する最も良い方法は何ですか?

どのように解決するのですか?

あるプロパティの値が特殊な値であるかどうかを確認する通常の方法 undefined である。

if(o.myProperty === undefined) {
  alert("myProperty value is the special value `undefined`");
}

オブジェクトが実際にそのようなプロパティを持っていないかどうかをチェックし、その結果として undefined にアクセスしようとすると、デフォルトで

if(!o.hasOwnProperty('myProperty')) {
  alert("myProperty does not exist");
}

識別子に関連付けられた値が特別な値であるかどうかを確認する場合 undefined , または その識別子が宣言されていない場合

if(typeof myVariable === 'undefined') {
  alert('myVariable is either the special value `undefined`, or it has not been declared');
}

注意: この最後の方法は 未宣言の の値を持つこととは異なります。 undefined .

ECMAScript 5 より前のバージョンの JavaScript では、グローバルオブジェクトの "undefined" というプロパティは書き込み可能だったので、単純なチェックでは foo === undefined が誤って再定義された場合、予期しない動作をする可能性があります。最近のJavaScriptでは、このプロパティは読み取り専用になっています。

しかし、現代のJavaScriptでは、"undefined"はキーワードではないので、関数内の変数に"undefined"という名前を付けて、グローバルプロパティをシャドウすることが可能です。

この(ありえない)エッジケースが心配な方は void演算子 を取得するために、特別な undefined の値そのものを指定します。

if(myVariable === void 0) {
  alert("myVariable is the special value `undefined`");
}