Wie überprüft man, ob eine Objekteigenschaft mit einer Variablen existiert, die den Eigenschaftsnamen enthält?

Ich überprüfe die Existenz einer Objekteigenschaft mit einer Variablen, die den fraglichen Eigenschaftennamen enthält.

var myObj; myObj.prop = "exists"; var myProp = "p"+"r"+"o"+"p"; if(myObj.myProp){ alert("yes, i have that property"); }; 

Dies ist undefined weil es nach myObj.myProp sucht, aber ich möchte, dass es nach myObj.prop

 var myProp = 'prop'; if(myObj.hasOwnProperty(myProp)){ alert("yes, i have that property"); } 

Oder

 var myProp = 'prop'; if(myProp in myObj){ alert("yes, i have that property"); 

Oder

 if('prop' in myObj){ alert("yes, i have that property"); } 

Sie können hasOwnProperty verwenden , aber basierend auf der Referenz benötigen Sie Anführungszeichen, wenn Sie diese Methode verwenden:

 if (myObj.hasOwnProperty('myProp')) { // do something } 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

Eine andere Möglichkeit ist die Verwendung von in operator, aber Sie benötigen auch hier Anführungszeichen :

 if ('myProp' in myObj) { // do something } 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

Vielen Dank für die Unterstützung von allen und die Eval-Aussage loszuwerden. Variablen müssen in Klammern stehen, nicht Punktnotation. Das funktioniert und ist sauberer, korrekter Code.

Jede davon sind Variablen: AppChoice, UnderI, UnderObstr.

 if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){ //enter code here } 

Eine viel sicherere Möglichkeit, zu überprüfen, ob eine Eigenschaft auf dem Objekt vorhanden ist, besteht darin, ein leeres Objekt oder einen Objektprototyp zum Aufrufen von hasOwnProperty()

 var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // always returns false // Use another Object's hasOwnProperty and call it with 'this' set to foo ({}).hasOwnProperty.call(foo, 'bar'); // true // It's also possible to use the hasOwnProperty property from the Object // prototype for this purpose Object.prototype.hasOwnProperty.call(foo, 'bar'); // true 

Referenz von MDN-Webdokumenten – Object.prototype.hasOwnProperty ()

Für eigenes Eigentum:

 var loan = { amount: 150 }; if(Object.prototype.hasOwnProperty.call(loan, "amount")) { //will execute } 

Hinweis: Die Verwendung von Object.prototype.hasOwnProperty ist besser als loan.hasOwnProperty (..), falls eine benutzerdefinierte hasOwnProperty in der Prototypkette definiert ist (was hier nicht der Fall ist), wie

 var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; 

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

Um vererbte Eigenschaften in den Befund einzubeziehen, benutzen Sie den in- Operator: (Sie müssen jedoch ein Objekt auf der rechten Seite von ‘in’ platzieren, primitive Werte werden Fehler ausgeben, zB ‘length’ in ‘home’ wird Fehler ausgeben, aber ‘length’ im neuen String (‘home’) wird nicht)

 const yoshi = { skulk: true }; const hattori = { sneak: true }; const kuma = { creep: true }; if ("skulk" in yoshi) console.log("Yoshi can skulk"); if (!("sneak" in yoshi)) console.log("Yoshi cannot sneak"); if (!("creep" in yoshi)) console.log("Yoshi cannot creep"); Object.setPrototypeOf(yoshi, hattori); if ("sneak" in yoshi) console.log("Yoshi can now sneak"); if (!("creep" in hattori)) console.log("Hattori cannot creep"); Object.setPrototypeOf(hattori, kuma); if ("creep" in hattori) console.log("Hattori can now creep"); if ("creep" in yoshi) console.log("Yoshi can also creep"); 

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

Hinweis: Man könnte versucht sein, typeof und [] property accessor als folgenden Code zu verwenden, der nicht funktioniert

 var loan = { amount: 150 }; loan.installment = undefined; if("installment" in loan) // correct { // will execute } if(typeof loan["installment"] !== "undefined") // incorrect { // will not execute } 

Sie können hasOwnProperty() sowie in operator verwenden.

 if(myObj[myProp]) { `enter code here` }