Wenn Sie nicht existierende Elemente eines Arrays ansprechen, wird die Leistung stark reduziert

Eine Beobachtung gemacht - ansprechend auf ein nicht existierendes Element des Arrays, reduziert die Leistung sehr. Es ist sichtbar auf langen Schleifen. Warum passiert es?

Beispiel:

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);

Bearbeiten:
Wenn Sie Code in Firefox ausführen, beachten Sie, dass Firefox das Verhalten von Firebug beeinflusst, indem es aktiviert oder deaktiviert wird. Ich habe es nach verschiedenen Tests verstanden.
Wenn es aktiviert ist - ergibt dasselbe, wie ich oben geschrieben habe. Wenn jedoch Firebug nach dem Start von Firefox nicht aktiviert wird, werden 2 ms (das ist schneller als in Opera und Chrome) und der Unterschied zwischen leeren / gefüllten Arrays ausgeblendet.
Beeinflussen auch die Ergebnisse von Tauschaufrufen mit der Funktion bench () - erst mit leerem, dann mit gefülltem Array (nur in Firefox mit aktiviertem Firebug, ohne Firebug und in anderen Browsern unverändert).

Warum beeinflussen solche Firebug? - zusätzliche Frage.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage