<br><br><div class="gmail_quote">On Wed, Oct 3, 2012 at 2:57 PM, Brendan Eich <span dir="ltr"><<a href="mailto:brendan@mozilla.com" target="_blank">brendan@mozilla.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">Jason Orendorff wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Wed, Oct 3, 2012 at 11:34 AM, Brendan Eich<<a href="mailto:brendan@mozilla.com" target="_blank">brendan@mozilla.com</a>>  wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
* the spread syntax just uses the iteration protocol;<br>
</blockquote>
This differs from Array.from -- any reason not to fall back on the<br>
array-like protocol (which for missing 'length' iterates no values)?<br>
</blockquote>
<br>
I think ES6 should have a single how-to-iterate behavior shared by<br>
Array.from, spread syntax, and for-of.<br>
<br>
Whether that includes a fallback to .length or not seems less important to me.<br>
<br>
It seems simpler *not* to include the fallback. Firefox doesn't<br>
include it at present. Instead, arraylike objects are pretty much all<br>
iterable. That wasn't hard to do, since our Array.prototype.iterator<br>
is generic.<br>
</blockquote>
<br></div>
I buy it.<br>
<br>
Not sure why we didn't do it in the July meeting where we settled on Array.from testing iterable and falling back on array-like. Perhaps fear that @iterator customizations will be missing from a number of array-likes.<br>

</blockquote><div><br></div><div>I didn't realize that existing built-ins and DOM APIs would be modified to implement the iterator protocol.</div><div><br></div><div>One of the reasons we decided to make spread, rest and destructuring "array-like" only was to limit the surprise factor that would occur with sparse arrays. The behaviour we wanted to avoid is present in Firefox 18</div>

<div><br></div><div><div>var a = new Array(10);</div><div><br></div><div>// A</div><div>console.log( a.map(function() { return 1; }) ); // [, , , , , , , , , ,]</div><div>// B</div><div>console.log( [...a].map(function() { return 1; }) ); // [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</div>

</div><div><br></div><div><br></div><div>From the notes:</div><div><br></div><div><pre style="white-space:pre-wrap">Destructing and spread - no iterator protocol.
(return to existing draft semantics of arraylike — [Cannot be both iterable
and array-like])</pre><pre style="white-space:pre-wrap"><span style="font-family:arial;white-space:normal"><br></span></pre><pre style="white-space:pre-wrap"><span style="font-family:arial;white-space:normal">I believe this was referring to iterator protocol filling in the holes with undefined, creating an unexpected result, therefore something cannot be both iterable and array-like without surprises. </span><span style="font-family:arial;white-space:normal">The result of calling Array.isArray(a) and </span><span style="font-family:arial;white-space:normal">Array.isArray([...a]) will be be true, but </span><span style="font-family:arial;white-space:normal">one appears to be constructed differently then the other. </span></pre>

<pre style="white-space:pre-wrap"><span style="font-family:arial;white-space:normal">Changing A to work like B could very well break things; </span><span style="font-family:arial;white-space:normal">but like Erik, Andreas and I have said above, holes are a myth in real-world code. </span></pre>

<pre style="white-space:pre-wrap"><span style="font-family:arial;white-space:normal">At one point I believed I had a valid use case, but it turned out that it was better to manually fill in with undefined.</span></pre></div>

<div><br></div><div><br></div><div>Rick</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On that point, does NodeList have an iterator in Firefox now? That's an obvious Array.from argument</blockquote><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

 type.<span class="HOEnZb"><font color="#888888"><br>
<br>
/be</font></span><div class="HOEnZb"><div class="h5"><br></div></div></blockquote></div>