Iterating over object properties (v7)

Revision 7 of this benchmark created on


Description

Comparing various approaches to iterating over an object's enumerable properties.

Setup

var object = {};
    for (var i = 0; i < 100; ++i) {
      object['user'+i] = 'user'+i;
    }
    var foo,
      run = function (key) { foo = object[key]; },
      run2 = function (key, val) { foo = val; };
    Object.prototype.loop = function (callback) { for (var i = 0, keys = Object.keys(this), l = keys.length; i < l; ++i) {
      callback(keys[i], this[keys[i]]);
    }};
    
    Object.prototype.loop2 = function (callback) { for (var i = 0, keys = Object.keys(this), l = keys.length; i < l; ++i) {
      callback(keys[i]);
    }};
    
    Object.prototype.loop3 = function (callback) {
                var i = 0,
                        keys = Object.keys(this),
                        l = keys.length;
    
                for (; i < l; i += 1) {
                        callback(keys[i], this[keys[i]]);
                }
        };

Test runner

Ready to run.

Testing in
TestOps/sec
for…in
for (var property in object) {
  if (object.hasOwnProperty(property)) {
    foo = object[property];
  }
}
ready
for…in with continue
for (var property in object) {
  if (!object.hasOwnProperty(property)) continue;
  foo = object[property];
}
ready
Filtering with Object.keys
for (var i = 0, keys = Object.keys(object), l = keys.length; i < l; ++i) {
  foo = object[keys[i]];
}
ready
Object.keys + forEach
Object.keys(object).forEach(function (key) {
  foo = object[key];
});
ready
Filtering with Object.keys and cache
var i, keys = Object.keys(object), l = keys.length;

for (i = 0; i < l; ++i) {
  foo = object[keys[i]];
}
ready
For ... in cache
var property;
for (property in object) {
  if (object.hasOwnProperty(property)) {
    foo = object[property];
  }
}
ready
Filtering with Object.keys 2
for (var i = 0, keys = Object.keys(object), key; key = keys[i];i++) {
   foo = object[key];
}
ready
Filtering with Object.keys While
var i=0;
var keys=Object.keys(object);
var key;
while (key=keys[i++]){
        foo = object[key];
}
ready
prototype loop1
object.loop(function (key) { foo = object[key]; });
ready
prototype loop1, key val
object.loop(function (key, val) { foo = val; });
ready
prototype loop1, cached
object.loop(run);
ready
prototype loop1, key val cached
object.loop(run2);
ready
prototype loop2
object.loop2(function (key) { foo = object[key]; });
ready
prototype loop2, cached
object.loop2(run);
ready
prototype loop3, key val cached
object.loop3(run2);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.