<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 2, 2012, at 3:55 PM, Brendan Eich wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Domenic Denicola wrote:<br><blockquote type="cite">From: Rick Waldron [mailto:waldron.rick@gmail.com]<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">This seems like an unfortunate decision, and I couldn't discern the motivation in the minutes. When would I want to use a syntax that fails for iterables? Does [...x] throw for an iterable, or result in something else?<br></blockquote></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><blockquote type="cite">The direct reasoning for the resolution was:<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><blockquote type="cite">"Cannot be both iterable and array-like"<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I can't really understand what this is trying to say. It must be because I don't understand "iterable". Doesn't it just mean "responds to for-of"?<br></blockquote><br>It means (in ES6, SpiderMonkey uses a string property name 'iterator') that the object in question ("is obj iterable?) has an @iterator property, which when called gets or creates an iterator for obj.<br><br><blockquote type="cite">I would imagine arrays, NodeLists, arguments, and other array-likes all respond to for-of; if they don't, that seriously decreases the utility of for-of!<br></blockquote><br>Array.from is that an object is either iterable, or failing that, array-like (even if no .length property, ToUint32(undefined) => 0 so no elements). See bottom of <a href="https://mail.mozilla.org/pipermail/es-discuss/2012-July/024207.html">https://mail.mozilla.org/pipermail/es-discuss/2012-July/024207.html</a>.<br></div></blockquote><div><br></div><div>But also see <a href="https://bugs.ecmascript.org/show_bug.cgi?id=588">https://bugs.ecmascript.org/show_bug.cgi?id=588</a> and in particular comment 1 which says:</div><div><br></div><div><pre class="bz_comment_text" id="comment_text_1">Did we talk about the implications of of using iterable protocol if the array
has holes?

The proposed standard iterator for Arrays turns holes into undefined.  While
normal array-like iteration skips holes. I would expect that

let a2 = Array.from([,,,,5]);

would produce a new array that was just like the argument array.  But using
iterator protocol would make it just like:

let a3 = Array.from([undefined, undefined, undefined, undefined, 5]);

It seems to me that the right solution, is that if the from argument is a real
Array then Array-like, hole preservation, iteration should be used.  If it
isn't a real Array, then from should first try iterable protocol and if it
isn't there fall back to array-like.</pre><div><br></div></div><blockquote type="cite"><div><br>As Allen's followup points out, array iteration skips holes, to match Array.prototype.forEach. Should spread fill holes or skip them?<br></div></blockquote><div><br></div><div>Holes need to be skipped if we expect</div><div><br></div><div>var arrayWithHoles = [,,2,,,5];</div><div>var copyOfArrayWithHoles = [...arrayWithHoles]];</div><div><br></div><div>to make an accurate copy.  </div><div><br></div><blockquote type="cite"><div><br><blockquote type="cite"><blockquote type="cite">It's possible that this could be added to the agenda for november, if Brendan wants to discuss SpiderMonkey's experience implementing it. It seems to me that if they're not having issues then it's at least worth a mention.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Yay!<br></blockquote><br>I actually do not remember why we went back to only array-like instead of iterable || array-like for spread. Can someone (Rick? Dave? Arv?) recall?<br><br>/be<br>_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>https://mail.mozilla.org/listinfo/es-discuss<br><br></div></blockquote></div><br></body></html>