Estou verificando a existência de uma propriedade de objeto com uma variável que contém o nome da propriedade em questão.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
Isso ocorre undefined
porque ele está procurando, myObj.myProp
mas eu quero que ele verifiquemyObj.prop
javascript
object
Slopeside Creative
fonte
fonte
hasOwnProperty
método for sobrescrito, você poderá confiar noObject.prototype.hasOwnProperty.call(object, property)
."Respostas:
Ou
Ou
Observe que
hasOwnProperty
não verifica propriedades herdadas, ao contrárioin
. Por exemplo,'constructor' in myObj
é verdade, masmyObj.hasOwnProperty('constructor')
não é.fonte
hasOwnProperty()
é melhor entãomyObj[myProp]
(de outras respostas), pois funciona mesmo que o valor demyProp
seja 0'qqq'.hasOwnProperty('length')
étrue
, você pode fazer isso.myProp
for 0, a instrução if seria semelhante aif (myObj[0])
qual semyObj
possui alguma propriedade, a expressão seria avaliada comotrue
. EmyObj[0]
pode não ser a propriedade que você está procurando.Você pode usar o hasOwnProperty , mas com base na referência, você precisa de aspas ao usar este método:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Outra maneira é usar no operador, mas você também precisa de aspas aqui:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
fonte
hasOwnProperty()
é implementado.Obrigado pela ajuda e esforço de todos para se livrar da declaração de avaliação. Variáveis precisam estar entre colchetes, não em notação de ponto. Isso funciona e é um código limpo e adequado.
Cada uma dessas variáveis é: appChoice, underI, underObstr.
fonte
tData.tonicdata[appChoice]
resultar em um valor que não possui uma propriedade / índice que correspondaunderI
, isso resultará em umTypeError
lançamento.Para propriedade própria:
Nota: usar Object.prototype.hasOwnProperty é melhor que loan.hasOwnProperty (..), caso um hasOwnProperty personalizado seja definido na cadeia de protótipos (que não é o caso aqui), como
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Para incluir propriedades herdadas na descoberta, use o operador in : (mas você deve colocar um objeto no lado direito de 'in', valores primitivos gerarão erros; por exemplo, 'length' em 'home' gerará erros, mas 'length' na nova String ('home') não)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Nota: Pode-se tentar usar typeof e [] property accessor como o código a seguir, que nem sempre funciona ...
fonte
Uma maneira muito mais segura de verificar se existe propriedade no objeto é usar o objeto vazio ou o protótipo do objeto para chamar
hasOwnProperty()
Referência do MDN Web Docs - Object.prototype.hasOwnProperty ()
fonte
hasOwnProperty
, nenhuma quantidade de guardas como essa tornará seu código seguro.Você pode usar
hasOwnProperty()
tanto quanto oin
operador.fonte