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?
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?
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 :
Verwendung von hasOwnProperty()
const hero = { name: 'Batman' };
hero.hasOwnProperty('name'); // => true hero.hasOwnProperty('realName'); // => false
Schlüsselwort/Operator verwenden in
const hero = { name: 'Batman' };
'name' in hero; // => true 'realName' in hero; // => false
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í .
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 }
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
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))
Beim zweiten Ansatz werden nur die eigenen Eigenschaften überprüft. Beispiel.
var obj = { a: 2, proto : {b: 2} }
console.log(obj.hasOwnProperty('b'))
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);
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.
Jetzt mit ECMAScript22 können wir hasOwn anstelle von hasOwnProperty
(Denn diese Funktion hat ihre Tücken)
Object.hasOwn(obj, propKey)
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.
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
yhasOwnProperty
herausgekommen Weg für mich langsamer als die anderen (98 % langsamer). Ich bin nicht überrascht überhasOwnProperty
langsamer zu sein, aber ich bin überrascht überin
.4 Stimmen
Es gibt einen neuen Vorschlag für Stufe 3,
Object.hasOwn
die einige der Probleme derObject.prototype.hasOwnProperty
.