Редактировать: исправлено неправильное использование типа благодаря комментарию @Bergi
Хорошие замечания по поводу производительности при переборе (очень) разреженных массивов - я бы предположил, что, возможно, использование isNaN (parseInt ()) в цикле позволит вам найти только элементы массива:
for( var propertyName in myArray){
if( !isNaN(parseInt(propertyName)) ){ /* probably array element */ }
}
Я не знаю, что работает лучше в hasOwnProperty () и вышеупомянутом подходе. Вы просто должны измерить это с очень большим массивом, повторяя его 10000 раз или что-то в этом роде. Если вы сделаете некоторые измерения производительности, результаты будут интересны, поэтому, пожалуйста, поделитесь! :)