JavaScriptには、オブジェクトのプロパティを横断する3つの方法があります。
1.for/in。 for for/inステートメントを使用して、オブジェクトのプロパティ(自分のプロパティ)とプロトタイプオブジェクトから継承されたプロパティを通過できます。列挙可能なプロパティのみが通過します。
2.Object.keys()。オブジェクトをパラメーターとしてobject.keys()に渡すことができ、object.keys()ステートメントは、すべてのプロパティ名文字列で構成される配列を返します。 object.keys()ステートメントは、オブジェクト自体の(独自のプロパティ)および列挙可能なプロパティのみを返します。このステートメントは、ECMAScript 5標準でのみ有効です。
3.Object.getownPropertyNames()。オブジェクトをパラメーターとしてobject.getownPropertyNames()に渡すことができます。 object.keys()のように、このステートメントは、すべてのプロパティ名文字列で構成される配列を返します。 object.keys()とは異なり、object.getownPropertyNames()ステートメントは、列挙可能かどうかに関係なく、すべてのオブジェクトの財産(独自の財産)を返します。このステートメントは、ECMAScript 5標準でのみ有効です。
上記の情報に基づいて、次の図を次のように要約します。
実験:
コードコピーは次のとおりです。
var o = {x:1、y:2};
var a = object.create(o);
az = 3;
for(p in a){
console.log(p);
} // zxy
console.log(object.keys(a)); // ["z"]]
console.log(object.getownPropertynames(a)); // ["z"]