<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 30, 2013, at 10:51 AM, Boris Zbarsky wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>On 10/30/13 7:57 AM, Anne van Kesteren wrote:<br><blockquote type="cite">On Tue, Oct 29, 2013 at 4:50 PM, Allen Wirfs-Brock<br></blockquote><blockquote type="cite"><<a href="mailto:allen@wirfs-brock.com">allen@wirfs-brock.com</a>> wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Spread now requires an Iterable rather than an array-like<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">This is different from how sequence<T> behaves in IDL. (It uses array-likes.) :/<br></blockquote><br>We could change that if we change all DOM arraylikesto be iterables (which they already are, I suspect).<br></div></blockquote><div><br></div><div>All that is needed is to add an @@iterator method whose definition is identical to <a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.values">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.values</a> </div><div>ArrayIterator objects (<a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array-iterator-object-structure">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array-iterator-object-structure</a> ) will work fine with any Array-like objects.  But note that ES6 Rev20 has simplified them from what is shown at this link.</div><div><br></div><blockquote type="cite"><div><br>The biggest compat issue will be cases that pass { "length": 1, 0: "x" } to a sequence<DOMString> or something, but do people do this in practice?<br></div></blockquote><div><br></div><div>Those are the sort of objects, that we decided to explicitly exclude from spread and for-of.  We could wrap an ArrayIterator around any object in those contexts that didn't have a @@iterator.  But that would mean that all objects would default to array-like iteration in those contexts.  When we discussed this we decided it is more likely that attempting to spreading or iterating over a object without a @@iterator is indication of a program bug.  So we throw on it.</div><div><br></div><div>For something like { "length": 1, 0: "x" }, one way to make it iterable would be { "length": 1, 0: "x" , [Symbol.iterator]: [].values}}</div><div><br></div><div><br></div><div>Allen</div><div><br></div><div><br></div></div></body></html>