Apelando a un elemento no existente de la matriz, reduce mucho el rendimiento

Hecho una observación: apelar a un elemento de matriz que no existe, reduce mucho el rendimiento. Es visiblemente en largos bucles. ¿Por qué sucede?

Ejemplo:

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

Editar:
Si está ejecutando código en Firefox, tenga en cuenta que, en consecuencia, Firefox influye en Firebug, lo habilita o lo deshabilita. Lo entendí, después de varias pruebas.
Si está habilitado - resultados iguales, como escribí arriba. Pero si Firebug no se activa después de iniciar Firefox, el tiempo es igual a 2 ms (más rápido que Opera y Chrome) y la diferencia entre la matriz vacía / llena desaparece.
También afecta a los resultados swap calls function bench (): primero con vacío, luego con matriz llena (solo en Firefox con Firebug habilitado, sin Firebug y en otros navegadores los resultados no han cambiado).

¿Por qué afecta a Firebug? - pregunta adicional.

Respuestas a la pregunta(1)

Su respuesta a la pregunta