Standard @iter module unfriendly to collection builders

Allen Wirfs-Brock allen at
Mon Nov 14 09:07:39 PST 2011

On Nov 12, 2011, at 12:05 PM, Brendan Eich wrote:

> On Nov 12, 2011, at 11:26 AM, Allen Wirfs-Brock wrote:
>> The Iterators proposal includes the definition ( ) of functions that are intended to support various common iteration patterns.
>> For example,   
>>   for ((k of keys(x)) { ...}
>>   for (v of values(x)) { ...}
>>   for ([k,v] of items(x)) {...}
>>   for (k of allKeys(x)) { ...}
>>   for (k of allValues(x)) { ...}
>>   for (i of allItems(x)) { ...}
>> The use of these functions seems to be pretty much an essential part of the intended use of the for-of statement.
> The prior question is what, if anything,
>   for (x of y) ... // and [x for x of y], etc.
> means.
> Should it throw if there's no @iterator private-named property in y *and* y is not a Proxy with an iterate trap? That is our current thinking. It may not be reflected well in the wiki.

Another possibility would be to build in default @iterator methods on Object.prototype and Array.prototype.  I'd probably make the object implementation be an items for enumerable properties and the array implementation iterate the values of 0..length-1 .
> The alternative is to iterate over property values of an object denoted y that has no unstratified @iterator or stratified handler iterate trap. But that is hostile to collections and your [] proposal.

Property values (without key identification) doesn't sounds that generally useful. 

> OTOH I see no problem for collection writers if we make for-of throw on untrapped objects. Collection authors would bind @iterator, @elementGet, and @elementSet. Life would be grand. Right?

Yes,  suspect that people defining collections would routinely want to over-ride @iterator.  However, the defaults probably do establish some expectations.  Particularly if we aren't providing many (any?) built-in collections  that might establish other expectations.


> /be

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list