Compare Revisions

for...in

Revision 7870:

Revision 7870 by Brettz9 on

Revision 7871:

Revision 7871 by neilerdwien on

Title:
for...in
for...in
Slug:
JavaScript/Reference/Statements/for...in
JavaScript/Reference/Statements/for...in
Content:

Revision 7870
Revision 7871
t83        Although it may be tempting to use this as a way to iterat83        Although it may be tempting to use this as a way to itera
>te over an <a href="/en/Core_JavaScript_1.5_Reference/Global_Obje>te over an <a href="/en/Core_JavaScript_1.5_Reference/Global_Obje
>cts/Array" title="en/Core_JavaScript_1.5_Reference/Global_Objects>cts/Array" title="en/Core_JavaScript_1.5_Reference/Global_Objects
>/Array">Array</a>, this is a bad idea. The <code>for...in</code> >/Array">Array</a>, this is a bad idea. The <code>for...in</code> 
>statement iterates over user-defined properties in addition to th>statement iterates over user-defined properties in addition to th
>e array elements, so if you modify the array's non-integer or non>e array elements, so if you modify the array's non-integer or non
>-positive properties (e.g. by adding a <code>"foo"</code> propert>-positive properties (e.g. by adding a <code>"foo"</code> propert
>y to it or even by adding a method or property to <code>Array.pro>y to it or even by adding a method or property to <code>Array.pro
>totype</code>), the <code>for...in</code> statement will return t>totype</code>), the <code>for...in</code> statement will return t
>he name of your user-defined properties in addition to the numeri>he name of your user-defined properties in addition to the numeri
>c indexes. Also, because order of iteration is arbitrary, iterati>c indexes. Also, because order of iteration is arbitrary, iterati
>ng over an array may not visit elements in numeric order. Thus it>ng over an array may not visit elements in numeric order. Thus it
> is better to use a traditional <a href="/en/Core_JavaScript_1.5_> is better to use a traditional <a href="/en/Core_JavaScript_1.5_
>Reference/Statements/for" title="en/Core_JavaScript_1.5_Reference>Reference/Statements/for" title="en/Core_JavaScript_1.5_Reference
>/Statements/for">for</a> loop with a numeric index when iterating>/Statements/for">for</a> loop with a numeric index when iterating
> over arrays. Similar arguments might be used against even using > over arrays. Similar arguments might be used against even using 
>for...in at all (at least without propertyIsEnumerable() or hasOw>for...in at all (at least without <a class="internal" href="/en/C
>nProperty() checks), since it will also iterate over Object.proto>ore_JavaScript_1.5_Reference/Global_Objects/Object/propertyIsEnum
>type (which, though usually discouraged, can, as in the case of A>erable" title="en/Core JavaScript 1.5 Reference/Global Objects/Ob
>rray.prototype, be usefully extended by the user where are no nam>ject/propertyIsEnumerable">propertyIsEnumerable</a>() or <a class
>espacing concerns caused by inclusion of other libraries which mi>="internal" href="/en/Core_JavaScript_1.5_Reference/Global_Object
>ght not perform the above checks on such iterations and where the>s/Object/hasOwnProperty" title="en/Core JavaScript 1.5 Reference/
>y are aware of the effect such extension will have on their own u>Global Objects/Object/hasOwnProperty">hasOwnProperty</a>() checks
>se of iterators such as for...in).>), since it will also iterate over Object.prototype (which, thoug
 >h usually discouraged, can, as in the case of Array.prototype, be
 > usefully extended by the user where are no namespacing concerns 
 >caused by inclusion of other libraries which might not perform th
 >e above checks on such iterations and where they are aware of the
 > effect such extension will have on their own use of iterators su
 >ch as for...in).

Back to History