Object.keys vs _,keys vs hasOwnProperty (v42)

Revision 42 of this benchmark created on


Preparation HTML

<script src="http://underscorejs.org/underscore-min.js"></script>

Setup

var i;
    var key;
    var keys;
    var l;
    var value;
    var hasOwnProperty = {}.hasOwnProperty;
    var obj = {
      'a': 1,
      'b': 2,
      'c': 3,
      'd': 4,
      'e': 5,
      'f': 6,
      'g': 7,
      'h': 8,
      'i': 9,
      'j': 10
    };
    
    obj.__proto__.each = function (func){
            keys  = Object.keys(this);
            for (var i = keys.length ; --i >= 0;){
                            func(this[keys[i]],keys[i],this);     
            }
    }
    
    obj.__proto__.each2 = function(func){
        keys  = Object.keys(this);
        for (var i = keys.length; i--;){
                                        func(this[keys[i]],keys[i],this);     
        }
    }
    Object.prototype.each3 = function(func){
        for (var i = (keys = Object.keys(this)).length; i--;){
                func(this[keys[i]],keys[i],this);     
        }
    }

Test runner

Ready to run.

Testing in
TestOps/sec
hasOwnProperty
for (key in obj) {
  if (hasOwnProperty.call(obj, key)) {
    value = obj[key];
  }
}
ready
Object.keys
keys = Object.keys(obj);
for (i = 0, l = keys.length; i < l; i++) {
  value = obj[keys[i]];
}
ready
Object.keys with forEach
keys = Object.keys(obj).forEach(function(key) {
  value = obj[key];
});
ready
_.keys
keys = _.keys(obj);
for (i = 0, l = keys.length; i < l; i++) {
  value = obj[keys[i]];
}
ready
each
obj.each(function(o){
value = o;
})
ready
each2
obj.each2(function(o){
value = o;
})
ready
sans function
keys  = Object.keys(obj);
for (var i = keys.length; i--;){
                value = obj[keys[i]];
}
ready
each3
obj.each3(function(o){
value = o;
})
ready
for in
for( var i in obj){
  value = i;
}
ready
decrementation in loop
keys  = Object.keys(obj);
for (var i = keys.length;;){
                value = obj[keys[--i]];
}
ready

Revisions

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