Brendan Eich wrote:
It's never inconsistent to allow one thing and disallow another. The particulars matter. This isn't "anything goes". Destructuring has a bit of utility and a lot of regularity in for-in head position. The initialiser from VariableDeclarationNoIn has neither specific utility nor regularity with respect to for-in in AWK, Python, or any other language with such a construct.

More to say, I sent too soon. Don't take this as more than it is: an attempt to explore an alternative meaning of for-in combined with certain destructuring patterns.

We have a request that seemed to receive popular support, to support

  for own (k in o) ...;

This could compose with the following nicely, and it tries to pave the CoffeeScript cowpath a bit (without taking CoffeeScript as normative or overriding or anything like that).

We could make just-so meanings for destructuring in for-in, also inspired by CoffeeScript (and JS1.7, which did this too while muddying the waters by failing to separate iteration protocol into for-of):

  for ([k, v] in o) ...;

Our current position is "use for-of and an items helper function":

import items from "@reflect"; // currently @iter; could be part of standard prelude

  for ([k, v] of items(o)) ...;

But I think detailing the design of ES6 must be allowed to entertain an even easier-to-use extension to for-in.

If you want values not keys, then per the current proposal you use

  for (v of values(o)) ...;

given the necessary values import, or inclusion in a standard prelude.

There's a hole vs. CoffeeScript: we do not want for-of on a plain Object to iterate over enumerable property values. Arrays, yes, Objects, no -- no Object.prototype.@iterator. So no |for (v of o) ...| for o = {p:1, q:2, r:3}.

Also no for each (v in o) as E4X (ECMA-357) promulgated. SpiderMonkey and Rhino support it and probably will have to carry it, but such "each" does not say its meaning (values not keys) clearly, and it doesn't compose with "own" nicely.

But with destructuring for-in, you could write

  for ([, v] in o) ...;

This is a bit ugly (holes never look pretty, even when they're useful).

Not sure what I think of this but I thought I'd throw it out here on es-discuss. The reason I bring it up is twofold: 1) for own (k in o) still needs to be discussed; 2) the for ([k, v] of items(o)) ...; tax is a bit higher than I'd like.

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to