Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

191
Vistas
Verificar si el objeto tiene una propiedad con el nombre dado devuelve falso

Hola, tengo este código simple:

 let obj = { games: [ {id: 'test'} ] } console.log(obj.games[0].id) // returns: test console.log('games[0].id' in obj) // returns: false console.log(obj.hasOwnProperty('games[0].id')) // returns: false

No entiendo el valor devuelto cuando trato de verificar el nombre de su propiedad en lugar de devolver su valor de propiedad.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

in y hasOwnProperty() solo toman un solo nombre de propiedad, no aceptan una expresión con propiedades anidadas.

Así que tienes que probar cada nivel por separado.

 console.log('games' in obj && 0 in obj.games && "id" in obj.games[0])

También puede usar el encadenamiento opcional para combinar todos menos el último cheque.

 console.log(obj?.games.?[0] && "id" in obj.games[0])
about 4 years ago · Juan Pablo Isaza Denunciar

0

El operador in solo puede probar un único atributo. No es lo suficientemente inteligente como para seguir un camino.

podrías simplemente

 const value = obj?.games?.[0]?.id; const exists = value !== undefined; console.log(exists)

Más importante aún, en este caso realmente no debería usar el operador in en absoluto. La desventaja del operador in es que requiere que el campo probado se codifique como una cadena.

En general, poner los nombres de los campos en cadenas es algo que se debe evitar, porque hace que sea más difícil encontrar usos y reconstruir el código más adelante.

El uso del operador in solo puede justificarse si el nombre del campo probado no es una constante, no conocida de antemano.


Habiendo dicho eso, la función hasOwnProperty hace algo ligeramente diferente. En realidad, es más estricto que la solución presentada anteriormente y también más estricto que el operador in . Comprueba estrictamente los campos en el objeto en sí, no los de tipo super/base.

El método hasOwnProperty() devuelve verdadero si la propiedad especificada es una propiedad directa del objeto, incluso si el valor es nulo o indefinido. El método devuelve falso si la propiedad se hereda o no se ha declarado en absoluto. A diferencia del operador in, este método no comprueba la propiedad especificada en la cadena de prototipos del objeto. (fuente: MDN )

about 4 years ago · Juan Pablo Isaza Denunciar

0

Tiene tres objetos y los métodos que está utilizando para probar están destinados a un solo objeto.

  • obj - objeto que contiene una propiedad de juegos
  • obj.games - matriz con un elemento
  • obj.games[0] - objeto con propiedad id

Considere estos que son todos verdaderos:

 let obj = { games: [ {id: 'test'} ] } console.log(`obj.hasOwnProperty('games')`, obj.hasOwnProperty('games')) console.log(`'games' in obj`, 'games' in obj) console.log(`obj.games.hasOwnProperty('0')`, obj.games.hasOwnProperty('0')) console.log(`'0' in obj.games`, '0' in obj.games) console.log(`obj.games[0].hasOwnProperty('id')`, obj.games[0].hasOwnProperty('id')) console.log(`'id' in obj.games[0]`, 'id' in obj.games[0]) if (obj && obj.games && obj.games.length > 0 && obj.games[0].id) { console.log('obj.games has at least one element, ' + 'and the first element has an id') } let id = obj && obj.games && obj.games.length > 0 && obj.games[0].id; console.log('id:', id);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda