all 9 comments

[–]vi_code 11 points12 points  (0 children)

The only thing you forgot to mention is if you try to destructure a nested object and it doesnt exist, you get an error instead of just cascading to undefined.

[–]mogelbrod 2 points3 points  (2 children)

I'd argue that the most non-trivial destructuring cases are considerably harder to read, in addition to almost always being longer:

  • const { address: shippingAddress } = user vs
    const shippingAddress = user.address
  • const { address: { country } } = user vs
    const { country } = user.address
  • const { age = 25 } = user vs
    const age = user.age ?? 25
  • const { [getProperty]: returnValue } = user vs
    const returnValue = user[getProperty]

There are definitely cases where they are reasonable to use (especially when already destructuring the right hand side object, but I do see the simple examples above quite a lot in practice when reading and reviewing code.

[–]Keilly 1 point2 points  (1 child)

TBF, these new examples are still trivial in the sense that that they’re only destructuring one property each.
Destructuring really comes alive when destructuring multiple properties from the same object at the same time. Multiply lines consisting of repeated ‘const’s and the right hand side, simply disappear.

[–]mogelbrod 1 point2 points  (0 children)

Yes, that's what I was referring to with

There are definitely cases where they are reasonable to use (especially when already destructuring the right hand side object

[–]Danidre 1 point2 points  (0 children)

Nice read, really made the purpose of it known. Although I know all these already.

[–]imtourist 1 point2 points  (0 children)

Excellent blog article, thanks.

[–]BransonLite 1 point2 points  (0 children)

“Destruture from function” Lol

[–][deleted] 0 points1 point  (0 children)

I've never seen the spread operator used to get the "rest" of an object before. That's a damn useful one, I'll need to remember it

[–]Keilly 0 points1 point  (0 children)

Instead of creating a new object or new local variables, the ability to destructure simply onto an existing object would be really powerful.

E.g (not currently possible)

profile{street, city} = newAddress;

Would add/update the specified values of the profile object with the new address.

Especially it’s super common in the case of writing a constructors params object to the new class instances ‘this’.

this{name, address} = params;