When you ask to see an array in the console (this is outside of the javascript specification), the console thinks you want to see just the array elements so that's what it shows you. That doesn't mean that there aren't other properties - that's just how Google chose to implement the console.
An array IS an object and has all the capabilities of an object. You can assign it properties just like an object (because it is an object).
An array also has a special property called .length that automatically keeps track of the length of numeric properties assigned to it which gives it the array-type capabilities and a bunch of methods for dealing with the sequential nature of arrays (.push(), .pop(), .slice(), etc...). A plain object does not have that special property .length or any of those array methods. An array may also have some internal optimizations that help it be more efficient when sequential runs of numeric properties are the only properties accessed.
So, you can iterate just the array elements with:
for (var i = 0; i < arr.length; i++) {
// access arr[i] here
}
or with .forEach():
arr.forEach(function(value, index, array) {
// use value and index here
})
Or, you can iterate all the properties either with:
var props = Object.keys(arr);
for (var i = 0; i < props.length; i++) {
// access props[i] here to get the property
// and arr[props[i]] to get the value of the property
}
or with:
for (var prop in arr) {
if (arr.hasOwnProperty(prop)) {
// access arr[prop] here
}
}