"私は、オブジェクトが を持っている場合、それらhasOwnProperty
もgetOwnProperty
およびsetOwnProperty
このhasOwnProperty()
関数は、オブジェクトのプロトタイプ チェーンのどこかから継承されたプロパティと比較して、名前付きプロパティがオブジェクトの直接のプロパティとして存在するかどうかを示します。in
演算子 (のようif (someProperty in someObject) {}
に使用) は、オブジェクトがプロトタイプ チェーンのどこかにそのプロパティを持っているかどうかを示します。
setOwnProperty()
次のように言うことができるため、対応する関数は必要ありません。
someObject[someProperty] = someValue;
指定されたプロパティが直接プロパティである場合にのみ値を返す関数が必要な場合、対応する関数の種類のアイデアはgetOwnProperty()
理にかなっていると思いますが、指定されたプロパティが見つからなかったことを示す方法はありませんプロパティが見つかった場合、null、undefined、false などはすべて正当な潜在的な値であるためです。したがって、それを達成するには、 を使用して 2 段階のプロセスとして実行する必要がありますif (hasOwnProperty())
。
しかし、それはあなたがやろうとしていることのようには聞こえません。私があなたを正しく理解していれば、プロパティ名が変数(あなたの場合は配列要素)にあるプロパティを設定する方法が必要なだけです。これらのプロパティにどの値を関連付けたいか明確にしていないので、単に を使用しますtrue
。
var arr = ['has_cats', 'has_dogs'];
var obj = {}; // note {} is generally preferred to new Object();
for(var i=0; i < arr.length; i++ ) {
// if the property doesn't already exist directly on
// the object
if(!obj.hasOwnProperty(arr[i])) {
// set the object property
obj[arr[i]] = true;
}
}
// can access with bracket notation
alert(obj["has_cats"]);
// can access with dot notation
alert(obj.has_cats);