Run details:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Chrome 96
Mac OS X 10.15.7
Desktop
3 years ago
Test name Executions per second
Using the spread operator 5106751.0 Ops/sec
Using Object.assign 10110171.0 Ops/sec
Using For-In loop 74083856.0 Ops/sec
Using For-In loop with type checks 5852321.0 Ops/sec
Tests:
  • Using the spread operator

    AخA
     
    const firstObject = { sampleData: 'Hello world' }
    const secondObject = { moreData: 'foo bar' }
    const finalObject = {
        ...firstObject,
        ...secondObject
    };
  • Using Object.assign

     
    const firstObject = { sampleData: 'Hello world' }
    const secondObject = { moreData: 'foo bar' }
    const finalObject = Object.assign({}, firstObject, secondObject);
  • Using For-In loop

     
    const firstObject = { sampleData: 'Hello world' }
    const secondObject = { moreData: 'foo bar' }
    const finalObject = {}
    for (let key in firstObject) {
      finalObject[key] = firstObject[key];
    }
    for (let key in secondObject) {
      finalObject[key] = secondObject[key];
    }
  • Using For-In loop with type checks

    x
     
    const firstObject = { sampleData: 'Hello world' }
    const secondObject = { moreData: 'foo bar' }
    const finalObject = {}
    if (firstObject != null) {
      for (let key in firstObject) {
        if (Object.prototype.hasOwnProperty.call(firstObject, key)) {
          finalObject[key] = firstObject[key];
        }
      }
    }
    if (secondObject != null) {
      for (let key in secondObject) {
        if (Object.prototype.hasOwnProperty.call(secondObject, key)) {
          finalObject[key] = secondObject[key];
        }
      }
    }