Odwoływanie się do nieistniejącego elementu tablicy znacznie zmniejsza wydajność

Dokonano obserwacji - odwołując się do nieistniejącego elementu tablicy, znacznie zmniejsza wydajność. Widocznie na długich pętlach. Dlaczego tak się dzieje?

Przykład:

var filledArray = []; //This array will filled
var emptyArray = [];  //This array leave empty

//fill one array
for(var i = 0; i < 1e6; i++) {
    filledArray[i] = true;
}

//Just iterate the array and call its elements
//In filled array all elements exists, in empty array non-exists
function callItems(arr) {
    for(var i = 0; i < 1e6; i++) {
        arr[i];
    }
}

//measurement function
function bench(f, d) {
    var start = new Date;
    f(d);
    alert(new Date - start, ' ms');
}

////Result for filled array
//Firefox 24.0:             20 ms
//Chrome 30.0:              3  ms
bench(callItems, filledArray);

////Result for empty array
//Firefox 24.0:             340 ms
//Chrome 30.0:              70  ms
bench(callItems, emptyArray);

Edytować:
Jeśli uruchamiasz kod w Firefoksie, zauważ, że w wyniku Firefoksa wpływ Firebug - włącza lub wyłącza go. Zrozumiałem to po różnych testach.
Jeśli włączone - wyniki są takie same, jak napisałem powyżej. Ale jeśli Firebug nie włącza się po uruchomieniu Firefox - czas równy 2ms (szybszy niż Opera i Chrome) i różnica między pustą / wypełnioną tablicą znika.
Wpływaj także na wywołania swap wyników funkcji bench () - najpierw z pustym, potem z wypełnioną tablicą (tylko w Firefox z włączonym Firebugiem, bez Firebug iw innych przeglądarkach bez zmian).

Dlaczego taki wpływ ma Firebug? - dodatkowe pytanie.

questionAnswers(1)

yourAnswerToTheQuestion