El objeto Object
proporciona una variedad de métodos para trabajar con ellos y sus propiedades. Vamos a ver algunos de los más útiles
Creación y clonación
Método | Descripción |
---|---|
Object.create() | Crea un nuevo objeto utilizando un objeto existente como prototipo. |
Object.assign() | Copia todas las propiedades enumerables de uno o más objetos a un objeto destino. |
Object.fromEntries() | Crea un nuevo objeto a partir de una lista de pares clave-valor. |
Crea un nuevo objeto con un prototipo específico.
const proto = { greet: function() { return "Hello"; } };
const obj = Object.create(proto);
console.log(obj.greet()); // "Hello"
Copia todas las propiedades enumerables de uno o más objetos fuente a un objeto destino.
const target = { a: 1 };
const source = { b: 2, c: 3 };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 2, c: 3 }
Convierte una lista de pares clave-valor en un objeto.
const entries = [['name', 'Alice'], ['age', 30]];
const obj = Object.fromEntries(entries);
console.log(obj); // { name: 'Alice', age: 30 }
Iteración en objetos
Método | Descripción |
---|---|
Object.keys() | Devuelve un array con los nombres de las propiedades |
Object.values() | Devuelve un array con los valores de las propiedades |
Object.entries() | Devuelve un array de pares [clave, valor] de las propiedades enumerables de un objeto. |
Devuelve un array con los nombres de las propiedades enumerables de un objeto.
const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);
console.log(keys); // ["a", "b", "c"]
Devuelve un array con los valores de las propiedades enumerables de un objeto.
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // [1, 2, 3]
Devuelve un array de pares [clave, valor] de las propiedades enumerables de un objeto.
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // [["a", 1], ["b", 2], ["c", 3]]
Acceso a propiedades
Método | Descripción |
---|---|
Object.hasOwnProperty() | Devuelve un booleano que indica si el objeto tiene la propiedad como propia. |
Object.hasOwn() | Similar a hasOwnProperty pero más moderno. |
Object.getOwnPropertyNames() | Devuelve un array con los nombres de todas las propiedades de un objeto. |
Object.getOwnPropertyDescriptor() | Devuelve el descriptor de una propiedad específica de un objeto. |
Devuelve un booleano indicando si el objeto tiene la propiedad especificada como propia (no heredada).
const obj = { a: 1 };
console.log(obj.hasOwnProperty('a')); // true
console.log(obj.hasOwnProperty('b')); // false
Devuelve un array con los nombres de todas las propiedades (enumerables y no enumerables) de un objeto.
const obj = { a: 1, b: 2, c: 3 };
const propNames = Object.getOwnPropertyNames(obj);
console.log(propNames); // ["a", "b", "c"]
Devuelve un descriptor de la propiedad para una propiedad específica de un objeto.
const obj = { a: 1 };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(descriptor);
// { value: 1, writable: true, enumerable: true, configurable: true }
Manipulación de propiedades
Método | Descripción |
---|---|
Object.defineProperty() | Define o modifica una propiedad de un objeto |
Object.defineProperties() | Define o modifica múltiples propiedades de un objeto. |
Define una nueva propiedad o modifica una existente en un objeto, controlando su configuración.
const obj = {};
Object.defineProperty(obj, 'name', { value: 'Alice', writable: false });
console.log(obj.name); // "Alice"
obj.name = 'Bob'; // No cambia porque writable es false
console.log(obj.name); // "Alice"
Define varias propiedades nuevas o modifica las existentes en un objeto, controlando sus configuraciones.
const obj = {};
Object.defineProperties(obj, {
name: { value: 'Alice', writable: true },
age: { value: 30, writable: false }
});
console.log(obj.name); // "Alice"
console.log(obj.age); // 30
Prototipos
Método | Descripción |
---|---|
Object.getPrototypeOf() | Devuelve el prototipo de un objeto especificado. |
Object.setPrototypeOf() | Establece el prototipo de un objeto especificado a otro objeto. |
Object.isPrototypeOf() | Devuelve un booleano que indica si un objeto está en la cadena de prototipos de otro objeto. |
Devuelve el prototipo (es decir, el valor de [[Prototype]]
) del objeto especificado.
const proto = {};
const obj = Object.create(proto);
const prototype = Object.getPrototypeOf(obj);
console.log(prototype === proto); // true
Establece el prototipo (es decir, el valor de [[Prototype]]
) de un objeto específico.
const proto = { greet: function() { return "Hello"; } };
const obj = {};
Object.setPrototypeOf(obj, proto);
console.log(obj.greet()); // "Hello"
Devuelve un booleano que indica si el objeto especificado está en la cadena de prototipos del objeto.
const proto = {};
const obj = Object.create(proto);
console.log(proto.isPrototypeOf(obj)); // true
Comparación y verificación
Método | Descripción |
---|---|
Object.is() | Determina si dos valores se consideran el mismo valor. |
Object.isExtensible() | Determina si un objeto puede tener nuevas propiedades añadidas. |
Object.isFrozen() | Determina si un objeto está congelado. |
Object.isSealed() | Determina si un objeto está sellado. |
Determina si dos valores son iguales (más preciso que ===
para NaN y +0 vs -0).
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(0, -0)); // false
Determina si las nuevas propiedades pueden ser añadidas a un objeto.
const obj = {};
console.log(Object.isExtensible(obj)); // true
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj)); // false
Determina si un objeto está sellado (no se pueden añadir o eliminar propiedades, pero las existentes pueden modificarse).
const obj = { a: 1 };
console.log(Object.isSealed(obj)); // false
Object.seal(obj);
console.log(Object.isSealed(obj)); // true
Determina si un objeto está congelado (no se pueden añadir, eliminar o modificar propiedades).
const obj = { a: 1 };
console.log(Object.isFrozen(obj)); // false
Object.freeze(obj);
console.log(Object.isFrozen(obj)); // true
Sellado, congelación y extensibilidad
Método | Descripción |
---|---|
Object.freeze() | Congela un objeto |
Object.seal() | Sella un objeto |
Object.preventExtensions() | Impide que se puedan añadir nuevas propiedades a un objeto. |
Congela un objeto, evitando que se añadan, eliminen o modifiquen propiedades.
const obj = { a: 1 };
Object.freeze(obj);
obj.a = 2; // No se puede modificar, se ignora en modo estricto.
obj.b = 2; // No se puede añadir, se ignora en modo estricto.
console.log(obj); // { a: 1 }
Sella un objeto, evitando que nuevas propiedades sean añadidas y marcando todas las propiedades existentes como no configurables.
const obj = { a: 1 };
Object.seal(obj);
obj.b = 2; // No se puede añadir, se ignora en modo estricto.
delete obj.a; // No se puede eliminar, se ignora en modo estricto.
console.log(obj); // { a: 1 }
Evita que nuevas propiedades sean añadidas a un objeto.
const obj = { a: 1 };
Object.preventExtensions(obj);
obj.b = 2; // No se puede añadir, se ignora en modo estricto.
console.log(obj); // { a: 1 }
Otras utilidades
Método | Descripción |
---|---|
Object.toString() | Devuelve una cadena de texto que representa el objeto. |
Object.valueOf() | Devuelve el valor primitivo del objeto especificado. |
Object.assign() | Copia las propiedades enumerables de uno o más objetos a otro objeto destino y lo retorna. |
Devuelve una cadena representando el objeto, útil para la depuración.
const obj = {};
console.log(obj.toString()); // "[object Object]"
Devuelve el valor primitivo del objeto especificado (normalmente devuelve el propio objeto, pero puede ser sobreescrito).
const obj = {};
console.log(obj.valueOf() === obj); // true