mozilla

Compare Revisions

for...in

Change Revisions

Revision 371165:

Revision 371165 by evilpie on

Revision 411365:

Revision 411365 by ethertank on

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

Revision 371165
Revision 411365
n13    <h2 id="Version_Information">n
14      Version Information
15    </h2>
nn14      <thead>
15        <tr>
16          <th colspan="2">
17            Statement
18          </th>
19        </tr>
20      </thead>
n18        <tr>n
19          <td class="header" colspan="2">
20            Statement
21          </td>
22        </tr>
n45for (<em>variable</em> in <em>object</em>) {n44for (<var>variable</var> in <var>object</var>) {
46  <span style="font-style: italic;">...</span>45  <i>...</i>
4746}
n70      A <code>for...in</code> loop does not iterate over non–enumn69      A <code>for...in</code> loop does not iterate over non–enum
>erable properties. Objects created from built–in constructors lik>erable properties. Objects created from built–in constructors lik
>e Array and Object have inherited non–enumerable properties from >e Array and Object have inherited non–enumerable properties from 
><code>Object.prototype</code> and <code>String.prototype</code> t><code>Object.prototype</code> and <code>String.prototype</code> t
>hat are not enumerable, such as <code><a href="/en/JavaScript/Ref>hat are not enumerable, such as <code><a href="/en-US/docs/JavaSc
>erence/Global_Objects/String" title="en/JavaScript/Reference/Glob>ript/Reference/Global_Objects/String">String</a></code>'s <code><
>al_Objects/String">String</a></code>'s <code><a href="/en/JavaScr>a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/in
>ipt/Reference/Global_Objects/String/indexOf" title="en/JavaScript>dexOf">indexOf</a></code> method or <code><a href="/en-US/docs/Ja
>/Reference/Global_Objects/String/indexOf">indexOf</a></code> meth>vaScript/Reference/Global_Objects/Object">Object</a></code>'s <co
>od or <code><a href="/en/JavaScript/Reference/Global_Objects/Obje>de><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Objec
>ct" title="en/JavaScript/Reference/Global_Objects/Object">Object<>t/toString">toString</a></code> method. The loop will iterate ove
>/a></code>'s <code><a href="/en/JavaScript/Reference/Global_Objec>r all enumerable properties of the object itself and those the ob
>ts/Object/toString" title="en/JavaScript/Reference/Global_Objects>ject inherits from its constructor's prototype (properties closer
>/Object/toString">toString</a></code> method. The loop will itera> to the object in the prototype chain override prototypes' proper
>te over all enumerable properties of the object itself and those >ties).
>the object inherits from its constructor's prototype (properties  
>closer to the object in the prototype chain override prototypes'  
>properties). 
n73      A <code>for...in</code> loop iterates over the properties on72      A <code>for...in</code> loop iterates over the properties o
>f an object in an arbitrary order (see the <a href="/en/JavaScrip>f an object in an arbitrary order (see the <a href="/en-US/docs/J
>t/Reference/Operators/delete#Cross-browser_issues" title="en/Java>avaScript/Reference/Operators/delete#Cross-browser_issues">delete
>Script/Reference/Operators/Special_Operators/delete_Operator#Cros> operator</a> for more on why one cannot depend on the seeming or
>s-browser_issues">delete operator</a> for more on why one cannot >derliness of iteration, at least in a cross-browser setting). If 
>depend on the seeming orderliness of iteration, at least in a cro>a property is modified in one iteration and then visited at a lat
>ss-browser setting). If a property is modified in one iteration a>er time, its value in the loop is its value at that later time. A
>nd then visited at a later time, its value in the loop is its val> property that is deleted before it has been visited will not be 
>ue at that later time. A property that is deleted before it has b>visited later. Properties added to the object over which iteratio
>een visited will not be visited later. Properties added to the ob>n is occurring may either be visited or omitted from iteration. I
>ject over which iteration is occurring may either be visited or o>n general it is best not to add, modify or remove properties from
>mitted from iteration. In general it is best not to add, modify o> the object during iteration, other than the property currently b
>r remove properties from the object during iteration, other than >eing visited. There is no guarantee whether or not an added prope
>the property currently being visited. There is no guarantee wheth>rty will be visited, whether a modified property (other than the 
>er or not an added property will be visited, whether a modified p>current one) will be visited before or after it is modified, or w
>roperty (other than the current one) will be visited before or af>hether a deleted property will be visited before it is deleted.
>ter it is modified, or whether a deleted property will be visited 
> before it is deleted. 
n77        If you only want to consider properties attached to the on76        If you only want to consider properties attached to the o
>bject itself, and not its prototypes, use <a href="https://develo>bject itself, and not its prototypes, use <a href="/en-US/docs/Ja
>per.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Ob>vaScript/Reference/Global_Objects/Object/getOwnPropertyNames">get
>ject/getOwnPropertyNames" title="https://developer.mozilla.org/en>OwnPropertyNames</a> or perform a <a href="/en-US/docs/JavaScript
>-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropert>/Reference/Global_Objects/Object/hasOwnProperty">hasOwnProperty</
>yNames">getOwnPropertyNames</a> or perform a&nbsp;<a class="inter>a> check (<a href="/en-US/docs/JavaScript/Reference/Global_Object
>nal" href="/en/JavaScript/Reference/Global_Objects/Object/hasOwnP>s/Object/propertyIsEnumerable">propertyIsEnumerable</a> can also 
>roperty" title="en/Core JavaScript 1.5 Reference/Global Objects/O>be used). Alternatively, if you know there won't be any outside c
>bject/hasOwnProperty">hasOwnProperty</a>&nbsp;check (<a class="in>ode interference, you can extend built-in prototypes with a check
>ternal" href="/en/JavaScript/Reference/Global_Objects/Object/prop> method.
>ertyIsEnumerable" title="en/Core JavaScript 1.5 Reference/Global  
>Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a> can 
> also be used). Alternatively, if you know there won't be any out 
>side code interference, you can extend built-in prototypes with a 
> check method. 
n82        <strong><code>for..in</code> should not be used to iteratn81        <strong><code>for..in</code> should not be used to iterat
>e over an <a href="/en/JavaScript/Reference/Global_Objects/Array">e over an <a href="/en-US/docs/JavaScript/Reference/Global_Object
> title="en/JavaScript/Reference/Global_Objects/Array">Array</a> w>s/Array">Array</a> where index order is important.</strong> Array
>here index order is important.</strong> Array indexes are just en> indexes are just enumerable properties with integer names and ar
>umerable properties with integer names and are otherwise identica>e otherwise identical to general Object properties. There is no g
>l to general Object properties.&nbsp; There is no guarantee that >uarantee that <code>for...in</code> will return the indexes in an
><code>for...in</code> will return the indexes in any particular o>y particular order and it will return all enumerable properties, 
>rder and it will return all enumerable properties, including thos>including those with non–integer names and those that are inherit
>e with non–integer names and those that are inherited.>ed.
n85        Because the order of iteration is implementation dependenn84        Because the order of iteration is implementation dependen
>t, iterating over an array may not visit elements in a consistent>t, iterating over an array may not visit elements in a consistent
> order. Therefore it is better to use a <a href="/en/JavaScript/R> order. Therefore it is better to use a <a href="/en-US/docs/Java
>eference/Statements/for" title="en/JavaScript/Reference/Statement>Script/Reference/Statements/for">for</a> loop with a numeric inde
>s/for">for</a> loop with a numeric index (or <a href="/en-US/docs>x (or <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Ar
>/JavaScript/Reference/Global_Objects/Array/forEach" title="/en-US>ray/forEach">Array.forEach</a> or the non-standard <code><a href=
>/docs/Reference/Global_Objects/Array/forEach">Array.forEach</a> o>"/en-US/docs/JavaScript/Reference/Statements/for...of">for...of</
>r the non-standard <code><a href="/en-US/docs/JavaScript/Referenc>a></code> loop) when iterating over arrays where the order of acc
>e/Statements/for...of" title="/en-US/docs/JavaScript/Reference/St>ess is important.
>atements/for...of">for...of</a></code> loop) when iterating over  
>arrays where the order of access is important. 
n98    var result = "";n97  var result = "";
n100    for (var prop in obj) {n99  for (var prop in obj) {
101        result += objName + "." + prop + " = " + obj[prop] + "\n"100    result += objName + "." + prop + " = " + obj[prop] + "\n";
>; 
102    }101  }
n104    return result;n103  return result;
nn113 
nn117 
n120    var result = "";n121  var result = "";
n122    for (var prop in obj) {n123  for (var prop in obj) {
123       if( obj.hasOwnProperty( prop ) ) {124    if( obj.hasOwnProperty( prop ) ) {
124          result += objName + "." + prop + " = " + obj[prop] + "\125      result += objName + "." + prop + " = " + obj[prop] + "\n";
>n"; 
125       } 
126    }126    } 
127  }
n128    return result;n129  return result;
n138      --n139      {{todo}}
n145        <a href="https://developer.mozilla.org/en-US/docs/JavaScrn146        <a href="/en-US/docs/JavaScript/Reference/Statements/for.
>ipt/Reference/Statements/for...of" title="/en-US/docs/JavaScript/>..of"><code>for...of</code></a> - a similar statement that iterat
>Reference/Statements/for...of">for...of</a> - a similar statement>es over the property <em>values</em>
> that iterates over the property <em>values</em> 
n148        <a href="/en/JavaScript/Reference/Statements/for_each...in149        <a href="/en-US/docs/JavaScript/Reference/Statements/for_
>n" title="en/JavaScript/Reference/Statements/for_each...in">for e>each...in"><code>for each...in</code></a> - a similar statement, 
>ach...in</a> - a similar statement, but iterates over the values >but iterates over the values of object's properties, rather than 
>of object's properties, rather than the property names themselves>the property names themselves (<a href="/en-US/docs/JavaScript/Ne
> (<a href="/en/JavaScript/New_in_JavaScript/1.6" title="en/New_in>w_in_JavaScript/1.6">New in JavaScript 1.6</a> but deprecated)
>_JavaScript_1.6">New in JavaScript 1.6</a> but deprecated) 
n151        <a href="/en/JavaScript/Reference/Statements/for" title="n152        <a href="/en-US/docs/JavaScript/Reference/Statements/for"
>en/JavaScript/Reference/Statements/for">for</a>>>for</a>
n154        <a href="/en/JavaScript/Guide/Iterators_and_Generators" tn155        <a href="/en-US/docs/JavaScript/Guide/Iterators_and_Gener
>itle="en/JavaScript/Guide/Iterators_and_Generators">Generator exp>ators">Generator expressions</a> (uses the <code>for...in</code> 
>ressions</a> (uses the <code>for...in</code> syntax)>syntax)
n157        <a href="/en-US/docs/Enumerability_and_ownership_of_propen158        <a href="/en-US/docs/Enumerability_and_ownership_of_prope
>rties" title="/en-US/docs/Enumerability_and_ownership_of_properti>rties">Enumerability and ownership of properties</a>
>es">Enumerability and ownership of properties</a> 
n160        <a href="https://developer.mozilla.org/en-US/docs/JavaScrn161        <a href="/en-US/docs/JavaScript/Reference/Global_Objects/
>ipt/Reference/Global_Objects/Object/getOwnPropertyNames" title="h>Object/getOwnPropertyNames"><code>getOwnPropertyNames</code></a>
>ttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Glob 
>al_Objects/Object/getOwnPropertyNames">getOwnPropertyNames</a> 
n163        <a href="https://developer.mozilla.org/en-US/docs/JavaScrn164        <a href="/en-US/docs/JavaScript/Reference/Global_Objects/
>ipt/Reference/Global_Objects/Object/hasOwnProperty" title="https:>Object/hasOwnProperty"><code>hasOwnProperty</code></a>
>//developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Ob 
>jects/Object/hasOwnProperty">hasOwnProperty</a> 
t166        <a href="https://developer.mozilla.org/en-US/docs/JavaScrt167        <a href="/en-US/docs/JavaScript/Reference/Global_Objects/
>ipt/Reference/Global_Objects/Array/forEach" title="https://develo>Array/forEach"><code>Array.prototype.forEach</code></a>
>per.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Ar 
>ray/forEach">Array.forEach</a> 

Back to History