オブジェクト内の属性の有無を検出するには、いくつかの方法があります。
1. in キーワード
を使用します。このメソッドは、オブジェクト自身のプロパティと継承されたプロパティが存在するかどうかを判断できます。
var o={x:1};
"x" in o; //true、独自のプロパティが存在します
"y" in o; //false
"toString" in o; //true、それは継承されたプロパティです
2. オブジェクトの hasOwnProperty() メソッドを使用します このメソッドは、独自のプロパティが存在するかどうかのみを判断し、継承されたプロパティについては false を返します。
var o={x:1};
o.hasOwnProperty("x"); //true、自身のプロパティに x が存在します
o.hasOwnProperty("y"); //false、自身のプロパティに y が存在しません
o.hasOwnProperty(" toString"); //false、これは継承されたプロパティですが、自己所有のプロパティではありません
3. を判断するために未定義を使用します自己所有財産と相続財産の両方を判断することができます。
var o={x:1};
o.x!==未定義; //true
o.y!==未定義; //false
o.toString!==未定義 //true
問題がありますこのメソッドでは、次のように、属性の値が定義されていない場合、このメソッドは望ましい結果を返すことができません。
o.x!==未定義; //false、属性は存在しますが、値は未定義です
o.y!==未定義; //false
o.toString!==未定義 //true
4. 条件文で直接判定
if(o.x) o.x =1; //x が undefine、null、false、0、または NaN の場合はそのままになります。変更なし