JS Array loops performances tests

by Damith Nuwan Sampath

HTML

<script src="//code.jquery.com/jquery-2.1.0.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>

CSS

* { font:12px/100% Courrier; }

JavaScript

/*
    ARRAYS & ITERATIONS
    http://jsperf.com/native-loop-performance/14
*/

//////////////////////////////////////////////////////////////////
// Preparation code + jQuery underscore in the body
// Re-Populate the Array for each test because some methods are "destructives" ("Array.pop()" ...)
var arr = [];

//////////////////////////////////////////////////////////////////
// Testing rendered values for each methods
// http://jsperf.com/native-loop-performance/14 : Test //-> Ops/sec 

var log = (function() {
    var logger = document.body;
    return function(mess) { logger.innerHTML += typeof(mess)+' : '+mess+'<br />'; };
}());

var arr = [];
for (var i = 0; i < 3; i++) arr[i] = i;

// THE TESTS !

log('----- Test 1 -----');

for (var i = 0; i < arr.length; i++) log(arr[i])

log('----- Test 2 -----');

for (var i = 0, length = arr.length; i < length; i++) log(arr[i])

log('----- Test 3 -----');

for (var i = arr.length - 1; i >= 0; i--) log(arr[i])

log('----- Test 4 -----');

for (var key in arr) log(arr[key])

log('----- Test 5 -----');

var i = 0;
while (i++ < arr.length) log(arr[i - 1])

log('----- Test 6 -----');

var length = arr.length;
while (length--) log(arr[length])

log('----- Test 7 -----');

var arr2 = arr.slice();
while(arr2.length) log(arr2.pop())

log('----- Test 8 -----');

var arr2 = arr.slice();
while(arr2.length) log(arr2.shift())

log('----- Test 9 -----');

var arr2 = arr.slice(); // Copy
do { log(arr2.shift())} while(arr2.length)
  
log('----- Test 10 -----');

arr.forEach(function(value) { log(value) })

log('----- Test 11 -----');

arr.map(function(value) { log(value) })

log('----- Test 12 -----');

$.each(arr, function(value) { log(value) })

log('----- Test 13 -----');

_.each(arr, function(value) { log(value) })

log('----- Test 14 -----');

try { // Only work in #FF ?
    eval("[log(arr[key]) for (key in arr )]");
}
catch(e) {}