Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Object.hasOwn()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since marzo de 2022.
El método estáticoObject.hasOwn() devuelvetrue si el objeto especificado tiene la propiedad indicada como propiedadpropia. Si la propiedad es heredada, o no existe, el método devuelvefalse.
Nota:Object.hasOwn() está pensada como un reemplazo deObject.prototype.hasOwnProperty().
In this article
Pruébalo
const object1 = { prop: "exists",};console.log(Object.hasOwn(object1, "prop"));// Expected output: trueconsole.log(Object.hasOwn(object1, "toString"));// Expected output: falseconsole.log(Object.hasOwn(object1, "undeclaredPropertyValue"));// Expected output: falseSintaxis
Object.hasOwn(obj, prop)Parametros
Valor de retorno del método
true si el objeto tiene definido directamente la propiedad especificada. De lo contrariofalse
Descripción
El métodoObject.hasOwn() devuelvetrue si la propiedad especificada es una propiedad directa del objeto — incluso si el valor de la propiedad esnull oundefined.El método devuelvefalse si la propiedad es heredada, o no ha sido declarado en absoluto.A diferencia del operadorin, este método no comprueba la propiedad especificada en la cadena de prototipos del objeto.
Se recomienda sobreObject.prototype.hasOwnProperty() porque funciona para objetos creados usandoObject.create(null) y con objetos que anulan el métodohasOwnProperty(). Si bien es posible solucionar estos problemas llamando aObject.prototype.hasOwnProperty() en un objeto externo,Object.hasOwn() es mas intuitivo.
Ejemplos
>Usando hasOwn para probar la existencia de una propiedad
El siguiente código muestra como determinar si el objetoexample contiene una propiedad llamadaprop.
const example = {};Object.hasOwn(example, "prop"); // false - 'prop' no ha sido definidoexample.prop = "existe";Object.hasOwn(example, "prop"); // true - 'prop' ha sido definidoexample.prop = null;Object.hasOwn(example, "prop"); // true - la propiedad existe con valor nuloexample.prop = undefined;Object.hasOwn(example, "prop"); // true - la propiedad existe con valor de indefinidoPropiedades directas vs. heredadas
El siguiente ejemplo diferencía entre propiedades directas y propiedades heredadas mediante la cadena de prototipos:
const example = {};example.prop = "existe";// `hasOwn` solo devolverá verdadero para propiedades directas:Object.hasOwn(example, "prop"); // Devuelve verdaderoObject.hasOwn(example, "toString"); // Devuelve falsoObject.hasOwn(example, "hasOwnProperty"); // Devuelve falso// El operador `in` devolverá verdadero para propiedades directas o heredadas:"prop" in example; // Devuelve verdadero"toString" in example; // Devuelve verdadero"hasOwnProperty" in example; // Devuelve verdaderoIterando sobre las propiedades de un objeto
Para iterar sobre las propiedades enumerables de un objeto,debe usar:
const example = { foo: true, bar: true };for (const name of Object.keys(example)) { // …}Pero si necesita usarfor...in, se puede usarObject.hasOwn() para omitir las propiedades heredadas:
const example = { foo: true, bar: true };for (const name in example) { if (Object.hasOwn(example, name)) { // … }}Comprobando si el índice de un arreglo existe
Los elementos de unArray son definidos como propiedades directas, asi que se puede usar el métodohasOwn() para comprobar si existe un índice en particular:
const fruits = ["Apple", "Banana", "Watermelon", "Orange"];Object.hasOwn(fruits, 3); // true ('Orange')Object.hasOwn(fruits, 4); // false - not definedCasos problematicos de hasOwnProperty
Esta sección demuestra quehasOwn() es inmune a los problemas que afectanhasOwnProperty. En primer lugar, puede usarse con objetos que han reimplementadohasOwnProperty():
const foo = { hasOwnProperty() { return false; }, bar: "Los dragones están fuera de la oficina",};if (Object.hasOwn(foo, "bar")) { console.log(foo.bar); //true - la reimplementación de hasOwnProperty() no afecta a Object}También se puede usar para probar objetos creados usandoObject.create(null). Estos no heredan deObject.prototype, por lo quehasOwnProperty() es inaccesible.
const foo = Object.create(null);foo.prop = "existe";if (Object.hasOwn(foo, "prop")) { console.log(foo.prop); //true - funciona independientemente de cómo se crea el objeto.}Especificaciones
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.hasown> |