Обращение к несуществующему элементу массива значительно снижает производительность

Сделал наблюдение - обращение к несуществующему элементу массива очень сильно снижает производительность. Это заметно на длинных петлях. Почему так происходит?

Пример:

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

Редактировать:
Если вы запускаете код в Firefox, обратите внимание, что на результат в Firefox влияет Firebug - включите или отключите его. Я понял это после различных испытаний.
Если он включен - результаты такие же, как я написал выше. Но если Firebug не включается после запуска Firefox - время равно 2 мс (что быстрее, чем у Opera и Chrome) и разница между пустым / заполненным массивом исчезает.
Также влияют на результаты подкачки вызовы функции bench () - сначала с пустым, затем с заполненным массивом (только в Firefox с включенным Firebug, без Firebug и в других браузерах результаты не изменяются).

Почему такое влияет Firebug? - дополнительный вопрос.

Ответы на вопрос(1)

Ваш ответ на вопрос