On Nov 7, 2011, at 12:59 AM, Lasse Reichstein wrote:

> If the object being destructured is in fact a plain Array, with no
> inherited elements above the length, then there is no difference.
> This is most likely the (very) common use case. This is what the ES
> programmers' intuition will be based one.

Agreed.


> The original question was what an ES programmer would expect.
> I think he will probably expect array-like deconstructors to treat the
> RHS as an array(-like object).
> I.e., [yes,yes].

js> a = [0,1]
[0, 1]
js> Array.prototype[2] = 2
2
js> a.length
2
js> a[2]
2

We do not filter Array [[Get]] of an index that happens to name an inherited 
property based on length.

This still doesn't mean a whole lot, as you say. It's the very uncommon case. 
But it makes that with inherited indexed properties, length is not always 
overriding.


> That also have the advantage of actually providing otherwise
> unavailable functionality.
> You can write {0:x, 1:y, 2:z} instead of [x,y,z] if you want
> object-behavior, but if they are the same, you can't get array-like
> behavior.

This is a good point. Allen made it too, IIRC.


> Arrays are just an abstraction in ECMAScript, which all the
> Array.prototype methods that are "intentionally generic" proves. If it
> quacks like an Array and swims like an Array, we allow ourselves to
> treat it like an Array.

See above for a meow from the 
array-with-inherited-indexed-properties-not-below-length duck. But that's an 
edge case, I agree.


> I.e., I think the most easily comprehensible behavior is to make array
> destructuring treat the RHS as an Array.
> It matches the common use-case (actual arrays), it is consistent (does
> the same whether you use ... or not), and is easily explainable.

The destructuring becomes a bit more complicated, with a temporary for 
rhs.length and a one-time up-front "get" of that property, and lhs positional 
index tests against that length temporary. Still bugs me, probably as an 
implementor but also just in terms of more complicated desugaring.

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

Reply via email to