Hamburger Icon
JavaScript: comprobar si una clave existe en un objeto

JavaScript: comprobar si una clave existe en un objeto

Como ya sabes, en JavaScript casi siempre existen muchas formas de hacer una misma cosa. En este post vamos a ver formas de comprobar si una llave existe en un objeto.

A través de hasOwnProperty()

Con el método hasOwnProperty() podemos saber si una propiedad concreta existe en un objeto:

const perro = {
  nombre: "Granuja",
  raza: "Golden Retriever",
  patas: 4,
}

console.log(perro.hasOwnProperty("patas")) // true

Lo único que debes saber sobre este método es que te devolverá true únicamente si tiene la propiedad indicada de forma directa. Si buscas una propiedad que haya podido heredar de uno de sus ancestros, entonces devolverá false tanto si existe como si no.

Con el operador in

En otro artículo sobre las formas de iterar con for en JavaScript ya vimos el operador in en los bucles for...in. El operador in también podemos usarlo para los condicionales:

const perro = {
  nombre: "Granuja",
  raza: "Golden Retriever",
  patas: 4,
}

// en este caso, nunca entraremos en el if
// 'vacunas' in perro devuelve false
if ("vacunas" in perro) {
  console.log("perro sano")
}

En este caso, sí que se tendrán en cuenta propiedades que hayan sido heredadas, mira este otro ejemplo para entenderlo mejor:

class Animal {
  constructor(vacunas) {
    this.vacunas = vacunas
  }
}

class Perro extends Animal {
  constructor(nombre, raza, patas, vacunas) {
    super(vacunas)
    this.nombre = nombre
    this.raza = raza
    this.patas = patas
  }
}

const miPerro = new Perro("Rodolfo", "mezcla", 4, true)

// en este caso, sí entra en el if
// 'vacunas' in perro devuelve true
if ("vacunas" in miPerro) {
  console.log("perro sano")
}

Alternativa

Como alternativa, puedes aprovecharte del _optional chaining_ en JavaScript. De esta forma, no necesitas comprobar si una propiedad existe o no, puedes lidiar directamente con undefined:

const perro = {
  nombre: "Granuja",
  raza: "Golden Retriever",
  patas: 4,
  vacunas: {
    polivalente: true,
    leishmania: false,
  },
}

if (perro.vacunas?.polivalente) {
  // true
}

if (perro.vacunas?.rabia) {
  // false (undefined))
}

Así que como puedes ver, tienes bastantes formas de comprobar si una propiedad existe o no en un objeto. De ti depende analizar cuál te viene mejor en cada caso. Yo, me inclino por usar el encadenamiento opcional y lidiar con undefined.