Git Product home page Git Product logo

Comments (12)

Chalarangelo avatar Chalarangelo commented on May 8, 2024 1

Object.assign() and { ...obj } are both ES6 and both work as far as shallow cloning goes (different techniques). Unless you can provide an argument why one of them is better than the other (performance or semantics or side-effects), we will sit here all day debating which one to use. So we better come up with an argument which one is the de-facto implementation and then update the snippet.

I want to keep the shallow clone snippet at all costs, as it is something that many new developers struggle with, so even if it is dead simple, it is helpful.

from 30-seconds-of-code.

Chalarangelo avatar Chalarangelo commented on May 8, 2024 1

The object spreads operator is slightly faster than Object.assign(), but it's not as well-supported. I'll close the issue and switch the current snippet to use Object.assign() for better support.

from 30-seconds-of-code.

atomiks avatar atomiks commented on May 8, 2024 1

@skatcat31 careful, that makes merge a global variable

(() => {
  const shallowClone = merge = (...args) => Object.assign({},...args);
})();

console.log(merge); // no error

from 30-seconds-of-code.

atomiks avatar atomiks commented on May 8, 2024

Well shallowClone implies it's just cloning one object, not assigning the properties of several into one. It's also a utility because it's shorter than Object.assign. There are other utilities like head of list that are like that.

from 30-seconds-of-code.

skatcat31 avatar skatcat31 commented on May 8, 2024

how is shallowClone shorter than Object.assign?

from 30-seconds-of-code.

skatcat31 avatar skatcat31 commented on May 8, 2024

ugh tried ot clear out a comment, ignore the toggle

from 30-seconds-of-code.

atomiks avatar atomiks commented on May 8, 2024

I believe that { ...obj } is actually not in the standard yet, it's a stage-3 proposal. I think it will be ES2018.

from 30-seconds-of-code.

Chalarangelo avatar Chalarangelo commented on May 8, 2024

@atomiks in that case send a PR with the change to use Object.assign() (after you've double-checked) and I'll merge it.

from 30-seconds-of-code.

atomiks avatar atomiks commented on May 8, 2024

Well it's implemented in browsers and babel, so I think it's fine to use. But it's not from ES6.

from 30-seconds-of-code.

Chalarangelo avatar Chalarangelo commented on May 8, 2024
  • Performance tests should indicate if we have a reason not to.
  • Browser coverage should indicate if we have a strong argument against one of the two.

(I don't have the time to check either one right now, maybe later)

from 30-seconds-of-code.

skatcat31 avatar skatcat31 commented on May 8, 2024

PS after thoughts(do not reopen)

You might want to create a hanging issue about changing it to the spread operator once fully supported then. I like Object.assign a little better because you can make two functions with the exact same footprint:

const shallowClone = merge = (...args) => Object.assign({},...args)

but that's hardly a reason to keep one over the other unless we want to show that you can also define two things to point at the same reference by chaining, but then shallowClone becomes overloaded

from 30-seconds-of-code.

lock avatar lock commented on May 8, 2024

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for any follow-up tasks.

from 30-seconds-of-code.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.