To me the lhs indicates: array. Thus, the rhs is a pseudo-array. When used as
such we get:
> [].join.call({0:0, 1:1, length: 2, 2:2}, "-")
'0-1'
Thus, 2 is invisible. That’s what I would expect, too, intuitively. I’d think
that the assignment should reflect that (thus: z = undefined)
On Nov 5, 2011, at 17:44 , Brendan Eich wrote:
> On Nov 5, 2011, at 9:28 AM, Allen Wirfs-Brock wrote:
>
>> In the following declaration, what should be the value of z?
>>
>> let [z,y,z] = {0:0, 1:1, length: 2, 2:2};
>>
>> should it be be 2 or undefined
>>
>> undefined might be reasonable because it is an array pattern, and the source
>> object is only has two "array-like" elements
>> 2 might be reasonable because the source object actually has a property
>> named "2"
>>
>> Which alternative will be least surprising to JS programmers?
>
> What I implemented long ago in SpiderMonkey based on the ES4 proposal gives
> z=2. I still think that's the best answer.
>
> Destructuring is "irrefutable" in that it desugars to assignments from
> properties of the RHS. It is not typed; it is not refutable (no one mention
> Erlang -- oops, Dmitry did; ok, refutable match is a separate beast, proposed
> but deferred: wiki.ecmascript.org/doku.php?id=strawman:pattern_matching). It
> should not impose any particular constraints on the RHS object based on the
> LHS pattern.
>
> In this case, the RHS object is not consistent with Array invariants anyway.
> That means as much, if not more, than the array pattern. Someone may have set
> it up that way for a reason. It could have come from a JSON deserialization.
> The array pattern should not check for 'length' and enforce Array invariants
> that do not apply inherently on the RHS.
>
> /be
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
--
Dr. Axel Rauschmayer
[email protected]
home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss