var obj = {
name: "Simon",
age: "20",
clothing: {
style: "simple",
hipster: false
}
}
for(var propt in obj){
console.log(propt + ': ' + obj[propt]);
}
変数はpropt
オブジェクトのプロパティをどのように表すのでしょうか? 組み込みメソッドやプロパティではありません。なぜ、オブジェクト内のすべてのプロパティが変数に含まれるのでしょうか?
ベストアンサー1
プロパティを反復処理するには、次の追加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