プロパティを反復処理するには、次の追加hasOwnProperty
チェックが必要です。
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// do stuff
}
}
オブジェクトのプロトタイプには、技術的にはオブジェクトの一部であるオブジェクトの追加プロパティが含まれているため、これは必要です。これらの追加プロパティは基本オブジェクトクラスから継承されますが、依然としてのプロパティですobj
。
hasOwnProperty
これがこのクラスに固有のプロパティであり、基本クラスから継承されたプロパティではないかどうかを確認するだけです。
hasOwnProperty
オブジェクト自体を介して呼び出すことも可能です。
if (obj.hasOwnProperty(prop)) {
// do stuff
}
ただし、オブジェクトに同じ名前の無関係なフィールドがある場合、これは失敗します。
var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError: hasOwnProperty is not a function
そのため、Object.prototype
代わりに呼び出す方が安全です。
var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo'); // true
if (typeof(obj[propt]) === 'object') {
/ *もう一度やり直してください* /}