Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Objetos globales
  5. Object
  6. Object.hasOwn()

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

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().

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: false

Sintaxis

js
Object.hasOwn(obj, prop)

Parametros

obj

La instancia del objeto JavaScript a probar.

prop

El nombre delString óSymbol de la propiedad a probar.

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.

js
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 indefinido

Propiedades directas vs. heredadas

El siguiente ejemplo diferencía entre propiedades directas y propiedades heredadas mediante la cadena de prototipos:

js
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 verdadero

Iterando sobre las propiedades de un objeto

Para iterar sobre las propiedades enumerables de un objeto,debe usar:

js
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:

js
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:

js
const fruits = ["Apple", "Banana", "Watermelon", "Orange"];Object.hasOwn(fruits, 3); // true ('Orange')Object.hasOwn(fruits, 4); // false - not defined

Casos 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():

js
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.

js
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

Compatibilidad con navegadores

Véase también


[8]ページ先頭

©2009-2025 Movatter.jp