This may be dangerous, without filtering the properties to exclude properties from the prototype chain.

From [Crockford](http://javascript.crockford.com/code.html)
`for` Statement

A `for` class of statements should have the following form:
```
    for (initialization; condition; update) {
        statements
    }

    for (variable in object) {
        if (filter) {
            statements
        } 
    }
```
The first form should be used with arrays and with loops of a predeterminable number of iterations.

The second form should be used with objects. Be aware that members that are added to the prototype of the object will be included in the enumeration. It is wise to program defensively by using the `hasOwnProperty` method to distinguish the true members of the object:
```
    for (variable in object) {
        if (object.hasOwnProperty(variable)) {
            statements
        } 
    }
```

[underscore.js _.keys](http://underscorejs.org/#keys) method does this by default. Pretty helpful.

[Here](https://github.com/jashkenas/underscore/blob/master/underscore.js#L819)'s the code for `_.keys`. You'll notice that it calls [`_.has`](https://github.com/jashkenas/underscore/blob/master/underscore.js#L1108) to do that check.