for...in
The for keyword is used in two ways in JavaScript. We've just seen how it is used in the for loop. It is also used in the for/in statement. This statement is a somewhat different kind of loop with the following syntax:
for (variableinobject)statement
The variable should be the name of a variable, or should be an element of an array or a property of an object; it should be something suitable as the left-hand side of an assignment expression. object is the name of an object, or an expression that evaluates to an object. As usual, the statement is a primitive statement or statement block that forms the body of the loop.
You can loop through the elements of an array by simply incrementing an index variable each time through a while or for loop. The for/in statement provides a way to loop through the properties of an object. The body of the for/in loop is executed once for each property of object. Before the body of the loop is executed, the name of one of the object's properties is assigned to variable, as a string. Within the body of the loop, you can use this variable to look up the value of the object's property with the [] operator. For example, the following for/in loop prints out the name and value of each property of an object:
for (prop in my_object) {
document.write("name: " + prop "; value: " + my_object[prop], "<br>");
}
The for/in loop does not specify in what order the properties of an object will be assigned to the variable. There is no way to tell in advance, and the behavior may differ between implementations or versions of JavaScript.
The for/in loop does not actually loop through all possible properties of all objects. The rules below specify exactly which properties the statement does list and which it does not in Navigator 3.0. Internet Explorer may use somewhat different rules:
- It lists any user-defined properties or methods explicitly set in a user-defined or system object.
- In general, it lists the properties, but not the methods, of built-in and HTML objects. Certain properties, such as the
constructorproperty are never listed, and some built-in objects may have object-specific listing behavior. This object-specific behavior may differ between Navigator and Internet Explorer. - It lists all defined indexes of user-defined arrays, but does not list the
lengthproperty of those arrays. - It lists the
lengthproperty and indices of built-in and HTML arrays. - It does not list properties of functions, methods, or constructors.
- It does not list the constants defined by the
MathandNumberobjects, such asMath.PI. (SinceMathandNumberare constructor functions, this follows from the above point.) - It does not list object properties or methods implicitly defined in an object with the
varorfunctionkeywords. (In client-side JavaScript, defining a variable withvaris the same as defining a property of the same name in the current Window object, except for the different treatment of these two cases by thefor/inloop.) Properties implicitly defined by thevarkeyword at any time will never again be listed, even if the property is afterwards directly and explicitly set in the object. This last is not true for thefunctionkeyword.