title: Calling forEach on an object
body: <p>Crockford's The Good Parts book tells me that JavaScript arrays are really objects. </p>
  
  <p>Given that, why doesn't this work? (And am I weird for expecting it to?)</p>
  
  <pre><code>arr={0:'a', 1:'b', 2:'c', 3:'d'}
  
  Array.prototype.forEach.call(arr, function(el){console.log(el)})
  </code></pre>
  
  <p>My thinking: If arrays are objects then presumably methods like <code>forEach</code> loop through an array's properties in ascending key order. (And through <code>call</code>, we can set the <code>this</code> that the method operates on.) I'm assuming that that's why <code>[].forEach.call(NodeList)</code> works.</p>