1872 Stimmen

Wie prüfe ich, ob ein Objekt eine bestimmte Eigenschaft in JavaScript hat?

Wie prüfe ich, ob ein Objekt eine bestimmte Eigenschaft in JavaScript hat?

Bedenken Sie:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

Ist das der beste Weg?

32 Stimmen

Ich habe einen jsperf-Test mit den Antworten aller geschrieben, um zu sehen, wer am schnellsten ist: jsperf.com/wörterbuch-enthaelt-schluessel

0 Stimmen

('propertyName' in Object) ? 'Eigenschaft ist vorhanden' : 'Eigenschaft ist nicht vorhanden'

2 Stimmen

@styfle danke für den jsperf-Test. in y hasOwnProperty herausgekommen Weg für mich langsamer als die anderen (98 % langsamer). Ich bin nicht überrascht über hasOwnProperty langsamer zu sein, aber ich bin überrascht über in .

10voto

JavaScript entwickelt sich nun weiter und wächst, da es nun gute und sogar effiziente Möglichkeiten zur Überprüfung gibt.

Hier sind einige einfache Möglichkeiten, um zu prüfen, ob Objekt hat eine bestimmte Eigenschaft :

  1. Verwendung von hasOwnProperty()

    const hero = { name: 'Batman' };

    hero.hasOwnProperty('name'); // => true hero.hasOwnProperty('realName'); // => false

  2. Schlüsselwort/Operator verwenden in

    const hero = { name: 'Batman' };

    'name' in hero; // => true 'realName' in hero; // => false

  3. Vergleiche mit undefined Stichwort

    const hero = { name: 'Batman' };

    hero.name; // => 'Batman' hero.realName; // => undefined

    // So consider this hero.realName == undefined // => true (which means property does not exists in object) hero.name == undefined // => false (which means that property exists in object)

Weitere Informationen finden Sie unter aquí .

8voto

rogopag Punkte 91

HasOwnProperty " kann verwendet werden, um festzustellen, ob ein Objekt die angegebene Eigenschaft als direkte Eigenschaft dieses Objekts hat; anders als der in-Operator Diese Methode prüft die Prototypenkette des Objekts nicht abwärts.

Also höchstwahrscheinlich, für das, was durch Ihre Frage scheint, wollen Sie nicht verwenden hasOwnProperty, die feststellt, ob die Eigenschaft als angehängte existiert direkt auf das Objekt selbst ,.

Wenn Sie feststellen wollen, ob die Eigenschaft in der Prototypenkette vorhanden ist, können Sie sie wie folgt verwenden:

if (prop in object) { // Do something }

0 Stimmen

Ich erhalte die Meldung "Der Operator 'in' kann nicht für die Suche nach 'prop' in myObject verwendet werden".

5voto

Komal Bansal Punkte 709

Sie können die folgenden Ansätze verwenden

var obj = {a:1}
console.log('a' in obj)               // 1
console.log(obj.hasOwnProperty('a'))  // 2
console.log(Boolean(obj.a))         // 3

Der Unterschied zwischen den folgenden Ansätzen ist wie folgt

  1. Im ersten und dritten Ansatz suchen wir nicht nur im Objekt, sondern auch in seiner prototypischen Kette. Wenn das Objekt die Eigenschaft nicht hat, aber die Eigenschaft in seiner Prototypenkette vorhanden ist, wird es wahr ergeben.

    var obj = { a: 2, proto : {b: 2} }

    console.log('b' in obj) console.log(Boolean(obj.b))

  2. Beim zweiten Ansatz werden nur die eigenen Eigenschaften überprüft. Beispiel.

    var obj = { a: 2, proto : {b: 2} }

    console.log(obj.hasOwnProperty('b'))

  3. Der Unterschied zwischen der ersten und der dritten Methode besteht darin, dass bei einer Eigenschaft mit einem undefinierten Wert die dritte Methode false liefert, während die erste Methode true liefert.

    var obj = { b : undefined }

    console.log(Boolean(obj.b)) console.log('b' in obj);

0 Stimmen

Boolean({b:''}.b) -> false

0 Stimmen

@KamilKieczewski ja, es soll false ergeben, jeder falsche Wert wird in diesem Fall false zurückgeben

5voto

Marco Balestra Punkte 119

Dado myObject Objekt und "myKey" als Schlüsselname:

Object.keys(myObject).includes('myKey')

ou

myObject.hasOwnProperty('myKey')

ou

typeof myObject.myKey !== 'undefined'

Letzteres war weit verbreitet, konnte aber (wie in anderen Antworten und Kommentaren hervorgehoben) auch mit Schlüsseln übereinstimmen, die vom Objektprototyp abgeleitet sind.

5voto

nassim miled Punkte 427

Jetzt mit ECMAScript22 können wir hasOwn anstelle von hasOwnProperty (Denn diese Funktion hat ihre Tücken)

Object.hasOwn(obj, propKey)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X