Como posso verificar se um objeto anônimo que foi criado como tal:
var myObj = {
prop1: 'no',
prop2: function () { return false; }
}
de fato tem um prop2 definido?
prop2
sempre será definido como uma função, mas para alguns objetos não é necessário e não será definido.
Tentei o que foi sugerido aqui: Como determinar se o objeto JavaScript nativo tem uma propriedade / método? mas não acho que funcione para objetos anônimos.
javascript
Omar
fonte
fonte
Respostas:
typeof myObj.prop2 === 'function';
informará se a função está definida.fonte
if(typeof myObj[propoeryStr] === 'function') { ... }
Você quer
hasOwnProperty()
:Referências: Mozilla , Microsoft , phrogz.net .
fonte
var my_obj = {'node1': document.createElement('div')};
, em seguida,my_obj.node1.hasOwnProperty('cloneNode')
é falsa. no entanto, a solução de Sean retornará corretamente verdadeira:typeof my_obj.node1.cloneNode === 'function'
3 Opções
typeof myObj.prop2 === 'function'
se o nome da propriedade não for dinâmico / geradomyObj.hasOwnProperty('prop2')
se o nome da propriedade for dinâmico e verificar apenas se é propriedade direta (não na cadeia de protótipos)'prop2' in myObj
se o nome da propriedade for dinâmico e verifique a cadeia de protótiposfonte
O que você quer dizer com "objeto anônimo"?
myObj
não é anônimo, pois você atribuiu um literal de objeto a uma variável. Você pode apenas testar isso:fonte
Uma maneira de fazer isso deve ser
if (typeof myObj.prop1 != "undefined") {...}
fonte
Eu sei que isto é uma questão antiga, mas estou surpreso que todas as respostas garantir que existe o método e é uma função, quando o OP só querer verificar para a existência. Para saber que é uma função (como muitos declararam), você pode usar:
Mas você também pode usar como uma condição:
Ou até:
Isso ocorre porque uma função é avaliada
true
eundefined
avaliada comofalse
. Portanto, se você souber que, se o membro existir, isso poderá ser apenas uma função, você poderá usar:Ou em uma expressão:
fonte