<div dir="ltr"><div><div><div><div>Hi there,<br><br></div>I was wondering if there were any plans to modify `arguments` to include default parameters (e.g. changing it from a simpleParameterList) or to include a new property that does allow iteration of all values available to a function.<br><br></div>for example:<br><span style="font-family:monospace,monospace"><br></span></div><span style="font-family:monospace,monospace">    function foo( a, b = 2 ) {<br></span></div><span style="font-family:monospace,monospace">        return arguments;<br></span><div><span style="font-family:monospace,monospace">    }<br><br></span></div><div><span style="font-family:monospace,monospace">    console.log( foo( 1 ) ); // outputs [ 1 ], not [ 1, 2 ]</span><br></div><div><div><div><div><div><br></div><div>Currently I can't see a way of getting default parameters as an iterable object.<br></div><div><br>I filed a bug with Mozilla over this, but they pointed out that the behaviour matches the spec.<br><div><br><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1144672">https://bugzilla.mozilla.org/show_bug.cgi?id=1144672</a><br><br></div><div>Regards,<br><br></div><div>Robin<br></div><div><div class="gmail_extra"><br><div class="gmail_quote">On 25 March 2015 at 05:39,  <span dir="ltr"><<a href="mailto:es-discuss-request@mozilla.org" target="_blank">es-discuss-request@mozilla.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Send es-discuss mailing list submissions to<br>
        <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:es-discuss-request@mozilla.org">es-discuss-request@mozilla.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:es-discuss-owner@mozilla.org">es-discuss-owner@mozilla.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of es-discuss digest..."<br>
<br>Today's Topics:<br>
<br>
   1. Re: Object arithmetic--operator alternative to Object.assign<br>
      (Edwin Reynoso)<br>
   2. Extended object literal property value shorthand (Bob Myers)<br>
   3. Re: Extended object literal property value shorthand (Bob Myers)<br>
<br><br>---------- Forwarded message ----------<br>From: Edwin Reynoso <<a href="mailto:eorroe@gmail.com">eorroe@gmail.com</a>><br>To: Rick Waldron <<a href="mailto:waldron.rick@gmail.com">waldron.rick@gmail.com</a>><br>Cc: Bob Myers <<a href="mailto:rtm@gol.com">rtm@gol.com</a>>, es-discuss <<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br>Date: Tue, 24 Mar 2015 23:09:30 -0400<br>Subject: Re: Object arithmetic--operator alternative to Object.assign<br><div dir="ltr"><div style="color:rgb(0,0,0)">Yea, um I'm only 16 and been programming in Javascript for about 2-3 years. I haven't gotten to the Nitty Gritty part of Javascript specs. So I won't be able to help out with that. I was just throwing out what I mentioned above.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 24, 2015 at 10:39 PM, Rick Waldron <span dir="ltr"><<a href="mailto:waldron.rick@gmail.com" target="_blank">waldron.rick@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span>On Tue, Mar 24, 2015 at 7:09 PM Edwin Reynoso <<a href="mailto:eorroe@gmail.com" target="_blank">eorroe@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="color:rgb(0,0,0)">For different objects this is the only way I see possible with destructuring. IMO it's a bit ugly and weird to read deep destructuring:<br><br>```<br><div>let x = { a: 1 };</div><div>let y = { b: 2 };</div><div>let { x: { a }, y: { b } } = { x, y };<br>```<br><br>But I'd prefer Bob Myers's way:<br><br>```<br>let x = { a: 1 };<br>let y = { b: 2 };<br><span style="color:rgb(51,51,51);font-family:Georgia,"Times New Roman",Times,serif;font-size:16px;line-height:22.8571px">{x.a, y.b}<br></span>```<br><br>Now that would be for destructuring. But isn't the following shorthand property assignment not destructuring:<br><br>```<br>var c = {x,y};<br><br>//so I'm thinking Bob wants the following:<br><br>var c = {x.a, b.y}; // {a: 1, b: 2}<br>```</div></div></div></blockquote><div><br></div></span><div>As an exercise to see if this is reasonable, I spent some time drafting an outline addition to "12.2.5.9 Runtime Semantics: PropertyDefinitionEvaluation" that handled a newly defined (ie. thing I made up) "PropertyDefinition : IdentifierNameReference", but ran into issues when I had to consider all the forms that MemberExpression includes. <a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-left-hand-side-expressions" target="_blank">https://people.mozilla.org/~jorendorff/es6-draft.html#sec-left-hand-side-expressions</a> </div><span><font color="#888888"><div><br></div><div><br></div><div><br></div><div>Rick</div></font></span><span><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 24, 2015 at 3:51 PM, Tab Atkins Jr. <span dir="ltr"><<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span>On Tue, Mar 24, 2015 at 9:44 AM, Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>> wrote:<br>
> Apologies if something like this has already been proposed.<br>
><br>
> We have simplified object literal syntax:<br>
><br>
> {a, b}<br>
><br>
> However, I often find myself writing this:<br>
><br>
> {a: x.a, b: y.b}<br>
><br>
> Would it be possible to have a syntax such as<br>
><br>
> {x.a, y.b}<br>
><br>
> Where the property name is taken from the last segment of the property<br>
> reference, so that `x.a` becomes the value of property `a`?<br>
<br>
</span>If you're taking both values from the *same* object, we have the syntax:<br>
<br>
{a, b} = x;<br>
<br>
This may or may not help you.<br>
<br>
~TJ<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br></div>
______________________________<u></u>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/<u></u>listinfo/es-discuss</a><br>
</blockquote></span></div></div>
</blockquote></div><br></div>
<br><br>---------- Forwarded message ----------<br>From: Bob Myers <<a href="mailto:rtm@gol.com">rtm@gol.com</a>><br>To: Rick Waldron <<a href="mailto:waldron.rick@gmail.com">waldron.rick@gmail.com</a>>, es-discuss <<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br>Cc: <br>Date: Wed, 25 Mar 2015 09:08:16 +0530<br>Subject: Extended object literal property value shorthand<br><div dir="ltr">Thanks Rick. Yes, I was hoping to make the following work:<div><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px">x = {a: 1}; </span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">y = {b: 2};</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = {x.a, b.y}; // {a: 1, b: 2}</span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">This is not destructuring, it's an extension to </span><font color="#000000"><span style="font-size:12.8px">object literal property value shorthand.</span></font></div><div><font color="#000000"><span style="font-size:12.8px">The idea is to derive the desired property name `a` from `x.a`.</span></font></div><div><font color="#000000"><span style="font-size:12.8px">However, it could be difficult to define when and how a property name could be derived from various types of member expressions. </span></font></div><div><font color="#000000"><span style="font-size:12.8px"><br></span></font></div><div><font color="#000000"><span style="font-size:12.8px">Here is an alternative, admittedly not too pretty, but perhaps easier to define and/or implement. The idea is to generalize the permissible properties for which values can be omitted/inferred, and also allow LHS destructuring-type syntax, so:</span></font></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><font face="monospace, monospace">x = {a: 1};</font></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><font face="monospace, monospace">y = {b: 2};</font></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">If I want to extract the two values using destructuring assignment today we can do:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">var { x: {a}, y: {b} } = { x, y }; // a=1, b=2</span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">Consider using the LHS destructuring syntax in the above as an expanded shorthand property:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = { </span><span style="color:rgb(0,0,0);font-size:12.8px"><b><font face="monospace, monospace">{ x: {a}, y: {b} }</font></b> </span><span style="color:rgb(0,0,0);font-size:12.8px">} // </span><span style="color:rgb(0,0,0);font-size:12.8px"> </span><span style="color:rgb(0,0,0);font-size:12.8px">// {a: 1, b: 2}</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">This kind of re-use of destructuring syntax would permit "renaming" "on-the-fly":</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = { </span><span style="color:rgb(0,0,0);font-size:12.8px">{ x: {a: A}, y: {b: B} } </span><span style="color:rgb(0,0,0);font-size:12.8px">} // </span><span style="color:rgb(0,0,0);font-size:12.8px"> </span><span style="color:rgb(0,0,0);font-size:12.8px">// {A: 1, B: 2}</span></div></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">Or pulling things from arrays:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">q = [1, 2, 3];</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = { { x: a, } }</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">erty" would be conceptually destructured into </span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">{ x: {a}, y: {b} }</span></div><div><font color="#000000"><span style="font-size:12.8px"><br></span></font></div><div><font color="#000000"><span style="font-size:12.8px">z = { x: {a}, y: </span></font></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 25, 2015 at 8:09 AM, Rick Waldron <span dir="ltr"><<a href="mailto:waldron.rick@gmail.com" target="_blank">waldron.rick@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span>On Tue, Mar 24, 2015 at 7:09 PM Edwin Reynoso <<a href="mailto:eorroe@gmail.com" target="_blank">eorroe@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="color:rgb(0,0,0)">For different objects this is the only way I see possible with destructuring. IMO it's a bit ugly and weird to read deep destructuring:<br><br>```<br><div>let x = { a: 1 };</div><div>let y = { b: 2 };</div><div>let { x: { a }, y: { b } } = { x, y };<br>```<br><br>But I'd prefer Bob Myers's way:<br><br>```<br>let x = { a: 1 };<br>let y = { b: 2 };<br><span style="color:rgb(51,51,51);font-family:Georgia,"Times New Roman",Times,serif;font-size:16px;line-height:22.8571px">{x.a, y.b}<br></span>```<br><br>Now that would be for destructuring. But isn't the following shorthand property assignment not destructuring:<br><br>```<br>var c = {x,y};<br><br>//so I'm thinking Bob wants the following:<br><br>var c = {x.a, b.y}; // {a: 1, b: 2}<br>```</div></div></div></blockquote><div><br></div></span><div>As an exercise to see if this is reasonable, I spent some time drafting an outline addition to "12.2.5.9 Runtime Semantics: PropertyDefinitionEvaluation" that handled a newly defined (ie. thing I made up) "PropertyDefinition : IdentifierNameReference", but ran into issues when I had to consider all the forms that MemberExpression includes. <a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-left-hand-side-expressions" target="_blank">https://people.mozilla.org/~jorendorff/es6-draft.html#sec-left-hand-side-expressions</a> </div><span><font color="#888888"><div><br></div><div><br></div><div><br></div><div>Rick</div></font></span><span><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 24, 2015 at 3:51 PM, Tab Atkins Jr. <span dir="ltr"><<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span>On Tue, Mar 24, 2015 at 9:44 AM, Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>> wrote:<br>
> Apologies if something like this has already been proposed.<br>
><br>
> We have simplified object literal syntax:<br>
><br>
> {a, b}<br>
><br>
> However, I often find myself writing this:<br>
><br>
> {a: x.a, b: y.b}<br>
><br>
> Would it be possible to have a syntax such as<br>
><br>
> {x.a, y.b}<br>
><br>
> Where the property name is taken from the last segment of the property<br>
> reference, so that `x.a` becomes the value of property `a`?<br>
<br>
</span>If you're taking both values from the *same* object, we have the syntax:<br>
<br>
{a, b} = x;<br>
<br>
This may or may not help you.<br>
<br>
~TJ<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br></div>
______________________________<u></u>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/<u></u>listinfo/es-discuss</a><br>
</blockquote></span></div></div>
</blockquote></div><br></div></div>
<br><br>---------- Forwarded message ----------<br>From: Bob Myers <<a href="mailto:rtm@gol.com">rtm@gol.com</a>><br>To: Rick Waldron <<a href="mailto:waldron.rick@gmail.com">waldron.rick@gmail.com</a>>, es-discuss <<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a>><br>Cc: <br>Date: Wed, 25 Mar 2015 09:09:09 +0530<br>Subject: Re: Extended object literal property value shorthand<br><div dir="ltr">Hit send too soon, please ignore.<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 25, 2015 at 9:08 AM, Bob Myers <span dir="ltr"><<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thanks Rick. Yes, I was hoping to make the following work:<div><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px">x = {a: 1}; </span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">y = {b: 2};</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = {x.a, b.y}; // {a: 1, b: 2}</span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">This is not destructuring, it's an extension to </span><font color="#000000"><span style="font-size:12.8px">object literal property value shorthand.</span></font></div><div><font color="#000000"><span style="font-size:12.8px">The idea is to derive the desired property name `a` from `x.a`.</span></font></div><div><font color="#000000"><span style="font-size:12.8px">However, it could be difficult to define when and how a property name could be derived from various types of member expressions. </span></font></div><div><font color="#000000"><span style="font-size:12.8px"><br></span></font></div><div><font color="#000000"><span style="font-size:12.8px">Here is an alternative, admittedly not too pretty, but perhaps easier to define and/or implement. The idea is to generalize the permissible properties for which values can be omitted/inferred, and also allow LHS destructuring-type syntax, so:</span></font></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><font face="monospace, monospace">x = {a: 1};</font></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><font face="monospace, monospace">y = {b: 2};</font></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">If I want to extract the two values using destructuring assignment today we can do:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">var { x: {a}, y: {b} } = { x, y }; // a=1, b=2</span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">Consider using the LHS destructuring syntax in the above as an expanded shorthand property:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = { </span><span style="color:rgb(0,0,0);font-size:12.8px"><b><font face="monospace, monospace">{ x: {a}, y: {b} }</font></b> </span><span style="color:rgb(0,0,0);font-size:12.8px">} // </span><span style="color:rgb(0,0,0);font-size:12.8px"> </span><span style="color:rgb(0,0,0);font-size:12.8px">// {a: 1, b: 2}</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">This kind of re-use of destructuring syntax would permit "renaming" "on-the-fly":</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = { </span><span style="color:rgb(0,0,0);font-size:12.8px">{ x: {a: A}, y: {b: B} } </span><span style="color:rgb(0,0,0);font-size:12.8px">} // </span><span style="color:rgb(0,0,0);font-size:12.8px"> </span><span style="color:rgb(0,0,0);font-size:12.8px">// {A: 1, B: 2}</span></div></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">Or pulling things from arrays:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">q = [1, 2, 3];</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">z = { { x: a, } }</span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">erty" would be conceptually destructured into </span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8px">{ x: {a}, y: {b} }</span></div><div><font color="#000000"><span style="font-size:12.8px"><br></span></font></div><div><font color="#000000"><span style="font-size:12.8px">z = { x: {a}, y: </span></font></div><div><span style="color:rgb(0,0,0);font-size:12.8px"><br></span></div><div><br></div></div></blockquote></div></div></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div></div></div></div></div></div></div></div>