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