2016-06-14 10 views
-1

MDNおよびその他のさまざまなソースによれば、for...inは列挙可能なプロパティのみを繰り返し処理します。列挙可能なものは、propertyIsEnumerable()に対してfalseを返すものと仮定します。... for配列のinの配列は、無制限のプロパティを繰り返し処理します

In false function each() 
In false function eachSlice() 
In false function all() 
In false function any() 

私はfor...inが配列のために助言されていないことを知っていると私はすでにその配列は、プロトタイプによって拡張された疑いがある:thisページ

var TstArr = [0]; 
 
for (var A in TstArr) { 
 
\t console.log("In",TstArr.propertyIsEnumerable(A),TstArr[A]); 
 
};

ログこの上それでも、次のコードそれは私の質問ではありません。私の疑問は、それがどうしようもないはずのものを列挙する理由です。 これはFF & Chromeの場合と同じです。

+0

あなたはprototype.jsのライブラリを使用している場合、あなたはそれをタグ付けする必要があります質問。組み込みメソッドが列挙できない* Array.prototype *が拡張されています。私の場合、結果は「真の0」です。 – RobG

+0

@RobG Prototypeはそのページで使用されていますが、私が質問した部分では使用していませんでした。 Prototypeの方法が私の推測でした。 – ZeroUnderscoreOu

+0

確かに、それはなぜ方法が現れていたのかを説明します。コードスニペットを実行しても、取得した結果は得られません。期待通りの結果を返します。 Prototype.jsがそのページに含まれていることに注意してください。 – RobG

答えて

4

propertyIsEnumerableオブジェクトの自身のプロパティが列挙可能かどうかをテストします。オブジェクトにその名前のプロパティがない場合は、falseを返します。

TstArrayのプロトタイプから継承されているものを列挙プロパティは、あなたがそのオブジェクトのメソッドを呼び出す必要がありますことを考える:

for (var p in TstArr) { 
    console.log(p, Object.getPrototypeOf(TstArr).propertyIsEnumerable(p)); 
} 
+0

私はこのメソッドが存在するかどうかも知りませんでした: -/ –

+1

好奇心を抱くMDNは、[enumerable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties)と[propertyIsEnumerable()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable)を参照してください。 –

+0

@Michael Gearyは、最初に尋ねる直前に、そしてもう一度前に、両方のページを読みました。彼らは十分に良いの所有権の要件を概説していないように見えます。それとも私の読書スキルなのでしょうか? – ZeroUnderscoreOu

関連する問題