Detectar correctamente propiedades de un objeto JavaScript

jsComo las propiedades en JavaScript pueden ser añadidas a un objeto en cualquier momento, a veces es necesario comprobar si dicha propiedad existe.

Se suele ver a menudo que esta tarea se realiza siguiendo el patrón:

if (persona.edad){
  //hacer algo con la edad
}

El problema con este patrón es que JavaScript evalúa como falso cualquier valor que sea:

  • null
  • undefined
  • false
  • NaN
  • “” (string vacío)

Como la propiedad puede contener uno de los anteriores valores el chequeo anterior puede dar falsos negativos.

Por ejemplo, si la edad de persona fuera 0, la condición se evaluará como false incluso aunque la propiedad exista.

Una forma de realizar la comprobación de si una propiedad existe sería con el operador in. El operador in busca la propiedad en el objeto y devuelve true si la encuentra.

var persona = {
  nombre: "Aitor",
  edad: 41,
  saludar: function(){
    console.log( "Hola, soy " + this.nombre );
  }
};

console.log( "nombre" in persona); // true
console.log( "edad" in persona); // true
console.log( "apellidos" in persona); // false
console.log( "saudar" in persona); // true

Ten en cuenta que los métodos también son propiedades y por lo tanto también puedes usar el operador in para detectarlos, como puedes ver en el ejemplo del método saludar().

En la mayoría de los casos, el operador in es la mejor forma de determinar si la propiedad existe. En otros casos sin embargo, puede que necesites comprobar la existencia de una propiedad no heredada, de las que están en el prototype. Para entendernos, si realizamos

console.log( "toString" in persona)

nos devolverá true.

Si necesitamos detectar si existe una propiedad de las llamadas own properties, deberemos usar el método hasOwnProperty().

console.log( "nombre" in persona); //true
console.log( persona.hasOwnProperty( "nombre" )); //true
console.log( "toString" in persona); //true
console.log( persona.hasOwnProperty( "toString" )); //false

Si hasta ahora has utilizado el patrón mostrado al principio y te están entrando sudores fríos, recuerda que a partir de ahora debes utilizar para detectar si existe una propiedad en un objeto:

  • el operador in (para own properties y prototype properties)
  • el método hasOwnProperty()  (sólo para own properties)

 

Detectar correctamente propiedades de un objeto JavaScript

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s