webentwicklung-frage-antwort-db.com.de

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

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");
};

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

595
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");
}

Beachten Sie, dass hasOwnProperty nicht nach geerbten Eigenschaften sucht, während in dies tut. Zum Beispiel ist 'constructor' in myObj wahr, aber myObj.hasOwnProperty('constructor') nicht.

1155
Rocket Hazmat

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

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 im Operator, aber Sie benötigen Anführungszeichen hier als Gut:

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

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

43
Adorjan Princz

Vielen Dank für die Unterstützung aller und für die Bemühungen, die eval-Aussage loszuwerden. Variablen mussten in Klammern und nicht in Punktnotation stehen. Dies funktioniert und ist sauberer, korrekter Code.

Dies sind jeweils Variablen: appChoice, underI, underObstr.

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

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 von hasOwnProperty() zu verwenden.

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 Web Docs - Object.prototype.hasOwnProperty ()

10
skmasq

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 die Verwendung von loan.hasOwnProperty (..), falls eine benutzerdefinierte hasOwnProperty in der Prototypenkette definiert ist (welche ist hier nicht der Fall), 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 geerbte Eigenschaften in die Suche einzubeziehen, verwenden Sie den Operator in : (Sie müssen jedoch ein Objekt rechts von 'in' platzieren. Grundwerte werden ausgegeben Fehler, zB 'Länge' in 'Heimat' wird Fehler auslösen, aber 'Länge' in neuem 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 immer funktioniert ...

var loan = { amount: 150 };

loan.installment = undefined;

if("installment" in loan) // correct
{
    // will execute
}

if(typeof loan["installment"] !== "undefined") // incorrect
{
    // will not execute
}
9
adnan2nd

Sie können den Operator hasOwnProperty() sowie in verwenden.

2
Simran Kaur