Clarify the destructuring syntax

André Bargull andre.bargull at udo.edu
Fri Apr 11 05:22:29 PDT 2014


On 4/11/2014 2:02 PM, Егор Николаев wrote:
> @André Bargull
> Are there any reasons for these restrictions? It confuses me. If I can
> for-of over string, so why can't I destructuring it?

I'd say it's mostly a language designer decision and it may still change 
before the final specification is published. I'd encourage you to file 
bug reports at https://bugs.ecmascript.org/ and/or post to this mailing 
list if you find any issues with the current specification draft. That 
way Allen (the spec editor, cc-ed) and other TC-39 members are notified 
and can take appropriate actions.


- André


>
>
> On Fri, Apr 11, 2014 at 3:10 PM, André Bargull <andre.bargull at udo.edu
> <mailto:andre.bargull at udo.edu>> wrote:
>
>>     Hi Erop,
>>
>>
>>     On Fri, Apr 11, 2014 at 12:35 PM, Егор Николаев <termi1uc1 at gmail.com  <https://mail.mozilla.org/listinfo/es-discuss>> wrote:
>>
>>     >/  1. Should the AssignmentExpression of DestructuringAssignment always to be
>>     /
>>     >/the Object type? />/```javascript />/let {length} = "123";
>>     />/assert(length, 3); />/``` />/Is this valid? />// Yes.
>
>     No.
>
>     13.2.1.4 Runtime Semantics: Evaluation,
>     LexicalBinding : BindingPattern Initializer, step 4
>
>     https://people.mozilla.org/~jorendorff/es6-draft.html#sec-let-and-const-declarations-runtime-semantics-evaluation
>
>
>
>>     >/
>>     />/  If it is:
>>     />/  2. Should the result of Get(obj, name) always be the Object type if
>>     />/  DestructuringAssignmentTarget is an ObjectLiteral or an ArrayLiteral?
>>     />/  According the spec 12.14.5.4 step 4.b this expression is invalid:
>>     />/  ```javascript
>>     />/  let {text: {length}} = {text: "123"};
>>     />/  assert(length, 3);
>>     />/  ```
>>     />/
>>     /
>>     Yes.
>
>     No.
>
>     13.2.3.7 Runtime Semantics: KeyedBindingInitialization
>     BindingElement : BindingPattern Initializer_opt, step 4
>
>     https://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-keyedbindinginitialization
>
>
>>     You can test this in the web console in a Nightly or Aurora build of
>>     Firefox.
>
>     You can test this in traceur or my test implementation
>     [https://github.com/anba/es6draft].  ;-)
>
>     Maybe the final draft will revert this restriction, it was
>     originally introduced in rev17. It is somewhat annoying, especially
>     for the string type, because the restriction also applies to spread
>     array elements and spread calls. For example `[..."abc"]` must now
>     be written as `[...new String("abc")]` to get the array of code points.
>
>     - André
>
>


More information about the es-discuss mailing list