Como posso determinar se um objeto x
tem uma propriedade definida y
, independentemente do valor de x.y
?
Atualmente estou usando
if (typeof(x.y) !== 'undefined')
mas isso parece um pouco desajeitado. Existe uma maneira melhor?
javascript
object
royhowie
fonte
fonte
Object.prototype.hasOwnProperty.call(x, 'y')
, de modo que propriedade chamada "hasOwnProperty" não seria conflito com processo de inspeção;){}.hasOwnProperty.call(x, 'y')
.Se você quiser saber se o objeto contém fisicamente a resposta da propriedade @ gnarf,
hasOwnProperty
fará o trabalho.Se você deseja saber se a propriedade existe em algum lugar, no próprio objeto ou na cadeia de protótipos, você pode usar o
in
operador .Por exemplo.:
fonte
Underscore.js ou Lodash
:)
fonte
Object.prototype.hasOwnProperty.call(x, "y")
. Para arrays Eu acho que você pode quererArray.prototype.indexOf
,_.indexOf
ou_.contains
Você pode aparar isso um pouco assim:
fonte
x = {y:undefined}
Um recurso do meu código original
o que pode ser útil em algumas situações é que é seguro usar se
x
existe ou não. Com qualquer um dos métodos na resposta do gnarf, deve-se primeiro testarx
se há alguma dúvida se ele existe.Portanto, talvez todos os três métodos tenham um lugar na mochila de truques.
fonte
(x && x.hasOwnProperty('y'))
or(x && 'y' in x)
ReferenceError
vez que a string 'indefinido'Como a pergunta era sobre clunkiness da verificação de propriedades, e um caso regular para validar objetos de opções de argumentos de função, pensei em mencionar uma maneira curta e livre de biblioteca de testar a existência de várias propriedades. Exoneração de responsabilidade: Requer o ECMAScript 5 (mas o IMO que ainda estiver usando o IE8 merece uma web quebrada).
fonte
Por que não simplesmente:
Ou se você espera um tipo específico:
fonte
x.hasOwnProperty('y')
?