Los objetos reúnen ciertos características para que todos tengan ese mismo tipo:

//Objeto
var usuario1 = {
	//key: value
	nombre: 'Adrián',
	apellido: 'Garcia',
	edad: 25
}
//otro Objeto
var usuario2 = {
	//key: value
	nombre: 'Damaris',
	apellido: 'Soto',
	edad: 22
}
//Abtener el atributo o key de un objeto
console.log(usuario1)             //todo el objeto
console.log(usuario1.edad)        //por parametro
//Obtener atributo por medio de una funcion
//... enviando solo el atributo
function imprimir (nombre) {
	console.log(nombre)
	console.log(nombre.toUpperCase())
}
imprimir(usuario1.nombre)

//... enviando todo el objeto
function imprimir (persona) {
	console.log(persona)
	console.log(persona.nombre)
	console.log(persona.nombre.toUpperCase())
	
	var { nombre } = persona //... obtiene solo el parametro del objeto
	console.log(nombre);
}
imprimir(usuario1)

//... enviando el objeto y obteniendo solo los atributos que nos interesan
function imprimir ({ nombre, apellido }) {
	console.log(`${nombre} ${apellido}`)
	console.log(`${nombre.toUpperCase()} ${apellido.toUpperCase()}`)
}
imprimir(usuario1)
//... incluso podemos declarar los atributos que enviemos, aunque no exista objeto
imprimir({ nombre: 'pepito', apellido: 'nada'})

JavaScript se comporta distinto con los objetos, si los modificamos dentro de una función el cambio se ve reflejado fuera de la función.

//El objeto tendra su atributo cambiado con esta función
function cumpleaños(persona) {
	persona.edad += 1
}
//cumpleaños(usuario1)
//usuario1

//Regresa una copia y ahi edita el atributo, y lo regresa
function cumpleañosFake(persona) {
	return {
	...persona,
	edad: persona.edad + 1
	}
}
//cumpleaños(usuario1)
//usuario1