2
var result = function(){}
console.log("constructor" in result);//true
console.log("__proto__" in result);//true
console.log("prototype" in result);//true

for (var prop in result) {
   console.log(prop); // no output!!
}

in結果のプロパティかどうかを判断するために使用すると、true が返されます。しかし、 を使用するfor-inと、結果にプロパティがありません。なぜですか?

4

5 に答える 5

7

参照: https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in

for...in ループは、列挙不可能なプロパティを反復処理しません。Array や Object などの組み込みコンストラクタから作成されたオブジェクトは、String の indexOf メソッドや Object の toString メソッドなど、列挙できない Object.prototype および String.prototype から列挙できないプロパティを継承しています。ループは、オブジェクトのすべての列挙可能なプロパティ、またはコンストラクターの proptotype から継承するもの (組み込みプロパティを上書きするものを含む) を反復処理します。

于 2012-03-02T09:03:05.443 に答える
4

これは、ターゲットの列挙可能なプロパティfor...inのみを反復処理するためです。列挙可能性は、プロパティが持つ場合と持たない場合がある属性です (書き込み可能性と構成可能性と共に)。それを持っていないものは、もちろんオブジェクトにまだ存在していても、によって公開されません。for...in

MDNは次のように言いますfor...in:

for...in ループは、列挙不可能なプロパティを反復処理しません。Array や Object などの組み込みコンストラクタから作成されたオブジェクトは、String の indexOf メソッドや Object の toString メソッドなど、列挙できない Object.prototype および String.prototype から列挙できないプロパティを継承しています。ループは、オブジェクトのすべての列挙可能なプロパティ、またはコンストラクターの proptotype から継承するもの (組み込みプロパティを上書きするものを含む) を反復処理します。

一方、in列挙可能性は考慮されていないため、trueそれ以上の審議なしにプロパティが存在する場合は返されます。

于 2012-03-02T09:04:03.663 に答える
1

一部のプロパティは enumerables であり、一部はそうでないため、for-in ループでは表示されません。

于 2012-03-02T09:03:33.413 に答える
0

行う

for (var prop in result) {
  console.log(result[prop]); // no output!!
 }

for..in期待どおりに反復しません。propは index で、ループは の各要素に対して実行されresultます。

それは同じです for(var i =0;i<result.length;i++)

于 2013-06-27T05:50:08.493 に答える