Javascript Logo
en español

¿Cuál es la mejor opción para verificar la existencia de una propiedad?

Fácil
-
2 min. lectura

JavaScript ofrece diferentes formas de verificar si un objeto tiene una propiedad en particular. Algunos desarrolladores prefieren usar hasOwnProperty, mientras que otros prefieren "optional chaining". Pero, ¿cuál es la mejor opción para verificar la existencia de una propiedad en JavaScript?

hasOwnProperty

hasOwnProperty es una función que se puede usar para determinar si un objeto tiene una propiedad en particular. Se usa de la siguiente manera:

const obj = { name: 'John Doe' };
if (obj.hasOwnProperty('name')) {
    console.log(obj.name); 
}

Como puedes ver, primero verificamos si el objeto obj tiene una propiedad llamada name y, en caso afirmativo, accedemos a su valor. Esta técnica es útil si deseas verificar si un objeto tiene una propiedad específica y evitar errores en el caso de que la propiedad no exista. Sin embargo, puede ser un poco verboso y requiere escribir más código.

Optional Chaining

Por otro lado, "optional chaining" es una técnica más concisa y elegante para acceder a una propiedad que puede o no existir. La sintaxis es la siguiente:

const obj = { name: 'John Doe' };  
console.log(obj?.name);

Como puedes ver, podemos acceder a la propiedad name del objeto obj de manera segura y evitar errores de tipo "Cannot read property of undefined". Además, se integra bien con el código JavaScript y es más fácil de leer. Sin embargo, si la propiedad que se está buscando no existe, el resultado será "undefined". Por lo tanto, es importante realizar una verificación adicional si se espera un valor diferente de "undefined".

Si necesitas verificar si un objeto tiene una propiedad en particular y realizar alguna acción en función de eso, "optional chaining" es una buena opción. Es más conciso y legible que hasOwnProperty, y se integra bien con el código JavaScript. Sin embargo, si necesitas verificar la existencia de una propiedad y esperas un resultado diferente de "undefined", es mejor utilizar "hasOwnProperty". Además, es importante tener en cuenta que "optional chaining" solo está disponible en versiones modernas de JavaScript y no es compatible con versiones antiguas

Bonus: In operator

El operador "in" es una característica más antigua de JavaScript y está disponible en todas las versiones del lenguaje. A diferencia de hasOwnProperty, que solo verifica si un objeto tiene una propiedad dada, el "in operator" verifica tanto las propiedades propias como las heredadas.

if ("property" in object) {
  // La propiedad existe
}

Sin embargo, a diferencia de "optional chaining", que permite acceder a una propiedad aunque no exista, el "in operator" solo verifica si una propiedad existe. No permite acceder a la propiedad.

"In operator" es menos utilizado que hasOwnProperty y "optional chaining", ya que la mayoría de las veces es más útil verificar exclusivamente las propiedades propias de un objeto o acceder a una propiedad de manera segura. Sin embargo, el "in operator" puede ser útil si deseas verificar la existencia de una propiedad, incluidas las heredadas, y no te importa si la propiedad es propia del objeto o se hereda de su prototipo.