home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  

JavaScript: The Definitive Guide

Previous Chapter 5

5.6 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 (variable in object)

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 constructor property 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 length property of those arrays.

  • It lists the length property 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 Math and Number objects, such as Math.PI. (Since Math and Number are constructor functions, this follows from the above point.)

  • It does not list object properties or methods implicitly defined in an object with the var or function keywords. (In client-side JavaScript, defining a variable with var is 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 the for/in loop.) Properties implicitly defined by the var keyword 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 the function keyword.

Previous Home Next
for Book Index break

HTML: The Definitive Guide CGI Programming JavaScript: The Definitive Guide Programming Perl WebMaster in a Nutshell