La respuesta que apunta Sergio, con el operador spread en objetos, es muy buena y quizás sea la mejor. Sin embargo ese operador a nivel de objeto está disponible solo a partir de EcmaScript 2018, si no me equivoco, por lo que no todos los navegadores la podrían hacer.
Por eso es posible conseguir un resultado similar por medio de un algoritmo, que crea un objeto 3 y va recorriendo las propiedades del objeto 1 y el objeto 2 para hacer un merge, pero manual.
El código sería:
const obj1 = {
name: "pepe",
age: 6,
course: '1º primaria'
}
const obj2 = {
course: '2º primaria',
address: 'Av. JS, 2'
}
let obj3 = {}
for (let i in obj1) {
obj3[i] = obj1[i];
}
for(let i in obj2) {
obj3[i] = obj2[i];
}
Esto funcionaría en todos los navegadores, incluso viejos Internet Explorer que andan por ahí.