Estoy verificando la existencia de una propiedad de objeto con una variable que contenga el nombre de la propiedad en cuestión.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
Esto se undefined
debe a que está buscando myObj.myProp
pero quiero que verifiquemyObj.prop
javascript
object
Slopeside Creative
fuente
fuente
hasOwnProperty
se sobrescribe el método, puede confiar en elObject.prototype.hasOwnProperty.call(object, property)
".Respuestas:
O
O
Tenga en cuenta que
hasOwnProperty
no verifica las propiedades heredadas, mientras quein
sí. Por ejemplo'constructor' in myObj
es cierto, peromyObj.hasOwnProperty('constructor')
no lo es.fuente
hasOwnProperty()
es mejor quemyObj[myProp]
(de otras respuestas) ya que funciona incluso si el valor demyProp
es 0'qqq'.hasOwnProperty('length')
es decirtrue
, puedes hacer eso.myProp
es 0, la declaración if se vería comoif (myObj[0])
if simyObj
tiene alguna propiedad, la expresión se evaluaríatrue
. YmyObj[0]
puede que no sea la propiedad que está buscando.Puede usar hasOwnProperty , pero según la referencia, necesita comillas cuando usa este método:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Otra forma es usarlo en el operador, pero también necesita citas aquí:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
fuente
hasOwnProperty()
se implementa.Gracias por la ayuda de todos y presionando para deshacerse de la declaración eval. Las variables deben estar entre paréntesis, no con notación de puntos. Esto funciona y es un código limpio y adecuado.
Cada una de estas son variables: appChoice, underI, underObstr.
fuente
tData.tonicdata[appChoice]
da como resultado un valor que no tiene una propiedad / índice que coincidaunderI
, entonces esto resultará en unTypeError
lanzamiento.Para propiedad propia:
Nota: usar Object.prototype.hasOwnProperty es mejor que loan.hasOwnProperty (..), en caso de que un hasOwnProperty personalizado se defina en la cadena de prototipos (que no es el caso aquí), como
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Para incluir propiedades heredadas en el hallazgo, use el operador in : (pero debe colocar un objeto en el lado derecho de 'in', los valores primitivos arrojarán un error, por ejemplo, 'length' en 'home' arrojará un error, pero 'length' en la nueva cadena ('casa') no)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Nota: Uno puede verse tentado a usar typeof y [] el descriptor de acceso de propiedad como el siguiente código que no siempre funciona ...
fuente
Una forma mucho más segura de verificar si existe una propiedad en el objeto es usar un objeto vacío o un prototipo de objeto para llamar
hasOwnProperty()
Referencia de MDN Web Docs - Object.prototype.hasOwnProperty ()
fuente
hasOwnProperty
, ninguna cantidad de guardias como este hará que su código sea seguro.Puede usar
hasOwnProperty()
tan bien comoin
operador.fuente