Array.indexOf vs Object.hasOwnProperty vs object[key] (v2)

Revision 2 of this benchmark created on


Description

Compare performance of Array.indexOf and Object.hasOwnProperty for member lookup

Setup

var arr = [];
    var i;
    for (i=0; i<1000; i++) {
        arr.push(i);
    }
    arr.push['fin'];
    
    var obj = {};
    for (i=0; i<1000; i++) {
        obj[i] = 1;
    }
    obj['fin'] = true;
    
    if (!Array.prototype.indexOf) {  
        Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {  
            "use strict";  
            if (this == null) {  
                throw new TypeError();  
            }  
            var t = Object(this);  
            var len = t.length >>> 0;  
            if (len === 0) {  
                return -1;  
            }  
            var n = 0;  
            if (arguments.length > 0) {  
                n = Number(arguments[1]);  
                if (n != n) { // shortcut for verifying if it's NaN  
                    n = 0;  
                } else if (n != 0 && n != Infinity && n != -Infinity) {  
                    n = (n > 0 || -1) * Math.floor(Math.abs(n));  
                }  
            }  
            if (n >= len) {  
                return -1;  
            }  
            var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);  
            for (; k < len; k++) {  
                if (k in t && t[k] === searchElement) {  
                    return k;  
                }  
            }  
            return -1;  
        }  
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Array.indexOf
arr.indexOf('fin');
ready
Object.hasOwnProperty
obj.hasOwnProperty('fin');
ready
lookup table
obj['fin'];
ready

Revisions

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