Proposal: spread assignment operator

# Артём Арутюнян (6 years ago)

An HTML attachment was scrubbed... URL: esdiscuss/attachments/20180425/c6e98df2/attachment

I propose spread assignment operator:

var obj = { test1: 1 }; var anotherObj = { test2: 2 }; obj ...= { test2: 2 }; // == (obj = { ...obj, ...anotherObj }) // { test1: 1, test2: 2 } I'm surprised it wasn't in the original implementation

# Isiah Meadows (6 years ago)

Note: Object.assign mutates its first argument and (with only obscure caveats) does exactly this. Not sure syntax is necessary here.

Oh, and arrays also have the common idiom array.push(...values) (but they could use an Array.prototype.pushAll to avoid polluting arguments lists).

# Arutyunyan Artyom (6 years ago)

An HTML attachment was scrubbed... URL: esdiscuss/attachments/20180425/16c607c5/attachment-0001

spread assignment not mutate, it reassign, like "+=" and other.

if ( ('a = {...a,...b}'.length > 'a ...= b'.length) === ('n = n+1'.length > 'n += 1'.length) ) { console.log('why "addition assignment" is necessary, but "spread assignment" is not?'); }

# Isiah Meadows (6 years ago)

It doesn't. But with objects, it's not a cheap operation to simply duplicate, and they aren't normally immutable like primitives. Furthermore, why is it for objects, not arrays?

(I'm pushing that second question as a point of potential confusion - remember the user.)

# Arutyunyan Artyom (6 years ago)
# Jeremy Martin (6 years ago)

By way of context, some similar ideas have been previously discussed:

esdiscuss.org/topic/picking-deconstructing-properties-into-object-literals

esdiscuss.org/topic/destructuring-an-object-into-a-new-object-like-underscore-pick-but-esier

esdiscuss.org/topic/extended-dot-notation-pick-notation-proposal

FWIW, I actually do like the idea of being able to syntactically "reshape" one object or array directly into another, and there's probably even a cowpath argument to be made on the basis of so many pick(), omit(), etc. implementations out there. On the other hand, per Isiah's comments, we're at least 90% there already with Object.assign(), so it seems like the value proposition could/should be developed a bit more on this.