title: How does object spread work if it is not an iterable?
body: <p>I'm learning about new uses of <em>spreading</em>.  I realize that <em>object spread</em> is an ES2018 proposal.  It works in Node 10.5 in the following manner:</p>
  
  <pre><code>const oldObj = {name:"doug", age:34};
  const newObj = {...oldObj}; 
  console.log(newObj); // { name: 'doug', age: 34 }
  </code></pre>
  
  <p>One interesting use of spreading is to convert iterables into arrays.  It works fine with Maps, for example, giving you an array of arrays of value pairs</p>
  
  <pre><code>const mappie = new Map().set("name", "doug").set("age", 234).set("profession", "seeker of Cthulhu");
  
  const arr1 = [...mappie];
  
  console.log(arr1); // [ [ 'name', 'doug' ], [ 'age', 234 ], [ 'profession', 'seeker of Cthulhu' ] ]
  </code></pre>
  
  <p>But I can't use this on an object</p>
  
  <pre><code>const obj = {
    name: "doug",
    age: 234,
    profession: "seeker of Chthulhu"
  };
  
  const arr2 = [...obj];
  console.log(arr2);
  </code></pre>
  
  <p>gives me</p>
  
  <pre><code>TypeError: obj is not iterable
  </code></pre>
  
  <p>OK, I understand that object is not iterable (at the moment).  But is <em>object spreading</em> some kind of different creature than <em>iterable spreading</em>?  That is it will work in some circumstances but not others, and one should just realize that objects can spread into objects only, and you can't <em>spread</em> them into arrays?  Or am I missing the big picture?  I'm trying to understand the new uses of <em>spread</em>, and any enlightenment appreciated....</p>