Ich überprüfe das Vorhandensein einer Objekteigenschaft mit einer Variablen, die den fraglichen Eigenschaftsnamen enthält.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
Das liegt undefined
daran, dass es gesucht wird, myObj.myProp
aber ich möchte, dass es danach suchtmyObj.prop
javascript
object
Pisten kreativ
quelle
quelle
hasOwnProperty
Sie sich auf das verlassen können , wenn die Methode überschrieben wirdObject.prototype.hasOwnProperty.call(object, property)
."Antworten:
Oder
Oder
Beachten Sie, dass
hasOwnProperty
nicht nach geerbten Eigenschaften gesuchtin
wird. Zum Beispiel'constructor' in myObj
ist wahr, abermyObj.hasOwnProperty('constructor')
nicht.quelle
hasOwnProperty()
ist besser alsmyObj[myProp]
(aus anderen Antworten), da es funktioniert, auch wenn der Wert vonmyProp
0 ist'qqq'.hasOwnProperty('length')
isttrue
, das kannst du machen.myProp
0 ist, die if-Anweisung so aussehen würde,if (myObj[0])
wenn wennmyObj
überhaupt irgendwelche Eigenschaften vorhanden wären, würde der Ausdruck ausgewertettrue
. UndmyObj[0]
möglicherweise nicht die Immobilie, die Sie suchen.Sie können hasOwnProperty verwenden , aber basierend auf der Referenz benötigen Sie Anführungszeichen, wenn Sie diese Methode verwenden:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Eine andere Möglichkeit ist die Verwendung im Operator, aber Sie benötigen auch hier Anführungszeichen :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
quelle
hasOwnProperty()
implementiert wird.Vielen Dank für die Unterstützung und das Bestreben, die eval-Erklärung loszuwerden. Variablen mussten in Klammern stehen, nicht in Punktnotation. Dies funktioniert und ist sauberer, korrekter Code.
Jede dieser Variablen ist: appChoice, underI, underObstr.
quelle
tData.tonicdata[appChoice]
sich ein Wert ergibt, dessen Eigenschaft / Index nicht übereinstimmtunderI
, wird ein WertTypeError
ausgelöst.Für eigenes Eigentum:
Hinweis: Die Verwendung von Object.prototype.hasOwnProperty ist besser als credit.hasOwnProperty (..), falls in der Prototypenkette eine benutzerdefinierte hasOwnProperty definiert ist (was hier nicht der Fall ist)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
So schließen vererbten Eigenschaften in der Erkenntnis , die Verwendung in Operator: (aber Sie müssen ein Objekt auf der rechten Seite platzieren ‚in‘, primitive Werte werden Fehler aus, zum Beispiel ‚Länge‘ in ‚Heimat‘ wird Fehler werfen, aber ‚Länge‘ in neuem String ('home') nicht)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Hinweis: Es könnte versucht sein, typeof und [] property accessor als folgenden Code zu verwenden, der nicht immer funktioniert ...
quelle
Eine viel sicherere Möglichkeit, um zu überprüfen, ob eine Eigenschaft für das Objekt vorhanden ist, besteht darin, ein leeres Objekt oder einen Objektprototyp zum Aufrufen zu verwenden
hasOwnProperty()
Referenz aus MDN-Webdokumenten - Object.prototype.hasOwnProperty ()
quelle
hasOwnProperty
, wird Ihr Code durch keine solche Anzahl von Wachen sicher oder geschützt.Sie können
hasOwnProperty()
sowohl alsin
Operator verwenden.quelle