Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

190
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda