Skip to content

Lección 34: Métodos Estáticos de Objetos

JavaScript proporciona métodos estáticos en Object para trabajar con objetos de forma más eficiente.

Object.keys(), Object.values(), Object.entries()

Section titled “Object.keys(), Object.values(), Object.entries()”

Devuelven arrays con las propiedades, valores o pares clave-valor de un objeto:

const usuario = {
nombre: 'Ana',
edad: 28,
ciudad: 'Madrid'
};
console.log(Object.keys(usuario)); // ['nombre', 'edad', 'ciudad']
console.log(Object.values(usuario)); // ['Ana', 28, 'Madrid']
console.log(Object.entries(usuario));
// [['nombre', 'Ana'], ['edad', 28], ['ciudad', 'Madrid']]

Copia propiedades de uno o más objetos fuente a un objeto destino:

const destino = { a: 1 };
const fuente1 = { b: 2, c: 3 };
const fuente2 = { d: 4 };
Object.assign(destino, fuente1, fuente2);
console.log(destino); // { a: 1, b: 2, c: 3, d: 4 }
// Clonar un objeto
const original = { x: 10, y: 20 };
const copia = Object.assign({}, original);
console.log(copia); // { x: 10, y: 20 }
const config = { tema: 'oscuro', idioma: 'es' };
Object.freeze(config);
config.tema = 'claro'; // No hace nada (ni modifica ni error en strict)
config.nuevaProp = 'test'; // No hace nada
delete config.idioma; // No hace nada
console.log(config); // { tema: 'oscuro', idioma: 'es' }
console.log(Object.isFrozen(config)); // true
const config2 = { tema: 'claro', idioma: 'en' };
Object.seal(config2);
config2.tema = 'oscuro'; // Sí funciona (modificar propiedades existentes)
config2.nuevaProp = 'test'; // No funciona (no añadir)
delete config2.idioma; // No funciona (no eliminar)
console.log(config2); // { tema: 'oscuro', idioma: 'en' }
console.log(Object.isSealed(config2)); // true

Verifica si una propiedad existe en el objeto (no en su prototipo):

const obj = { a: 1 };
console.log(obj.hasOwnProperty('a')); // true
console.log(obj.hasOwnProperty('toString')); // false (viene del prototipo)
// Iterar sobre objetos
const puntuaciones = { Ana: 95, Luis: 88, Carlos: 72 };
// for...in itera sobre propiedades enumerables (incluyendo prototipo)
for (let nombre in puntuaciones) {
if (puntuaciones.hasOwnProperty(nombre)) {
console.log(`${nombre}: ${puntuaciones[nombre]}`);
}
}
// Con Object.entries() es más limpio
for (const [nombre, puntuacion] of Object.entries(puntuaciones)) {
console.log(`${nombre}: ${puntuacion}`);
}
// Transformar objeto a array de objetos
const usuariosArray = Object.entries(puntuaciones).map(([nombre, puntuacion]) => ({
nombre,
puntuacion
}));
console.log(usuariosArray);
// [{ nombre: 'Ana', puntuacion: 95 }, ...]

Object.freeze() es superficial (shallow). Los objetos anidados siguen siendo mutables:

const obj = { anidado: { a: 1 } };
Object.freeze(obj);
obj.anidado.a = 2; // Sí funciona
console.log(obj.anidado.a); // 2

Usa Object.keys() + forEach() para iterar propiedades. Usa Object.entries() cuando necesites clave y valor. Usa Object.assign({}, obj) o spread operator para clonar. Reserva freeze para configuraciones inmutables y seal para objetos con estructura fija pero valores modificables.

Escribe una función llamada filtrarPorValor que reciba un objeto y un número mínimo, y devuelva un nuevo objeto solo con las propiedades cuyo valor sea >= al mínimo.

function filtrarPorValor(objeto, minimo) {
// Usa Object.entries() y filter
}
const datos = { a: 10, b: 5, c: 20, d: 3 };
console.log(filtrarPorValor(datos, 10)); // { a: 10, c: 20 }