Standard @iter module unfriendly to collection builders

Brendan Eich brendan at
Sat Nov 12 12:05:24 PST 2011

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.


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.

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.

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?

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

More information about the es-discuss mailing list