Wie kann ich feststellen, ob ein Objekt x
hat eine definierte Eigenschaft y
unabhängig vom Wert von x.y
?
Ich verwende derzeit
if (typeof(x.y) !== 'undefined')
aber das scheint ein bisschen klobig zu sein. Gibt es einen besseren Weg?
Wie kann ich feststellen, ob ein Objekt x
hat eine definierte Eigenschaft y
unabhängig vom Wert von x.y
?
Ich verwende derzeit
if (typeof(x.y) !== 'undefined')
aber das scheint ein bisschen klobig zu sein. Gibt es einen besseren Weg?
Wenn Sie auf Eigenschaften testen, die sich auf das Objekt selbst beziehen (nicht auf einen Teil seiner Prototypenkette), können Sie .hasOwnProperty()
:
if (x.hasOwnProperty('y')) {
// ......
}
Sie können die in
Operator, um nach Eigenschaften zu suchen, die auch vererbt werden.
if ('y' in x) {
// ......
}
Wenn Sie wissen wollen, ob das Objekt physisch enthält die Eigenschaft @gnarf's Antwort mit hasOwnProperty
wird die Arbeit erledigen.
Wenn Sie wissen wollen, ob die Eigenschaft irgendwo existiert, entweder auf dem Objekt selbst oder oben in der Prototypenkette, können Sie die in
operador .
if ('prop' in obj) {
// ...
}
Beispiel:
var obj = {};
'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
enthält
Object.keys(x).includes('y');
Die Array.prototype.includes()
bestimmt, ob ein Array einen bestimmten Wert enthält, und gibt je nach Fall true oder false zurück.
と
Object.keys()
gibt ein Array von Strings zurück, die alle aufzählbaren Eigenschaften des angegebenen Objekts darstellen.
.hasOwnProperty()
und die ES6+ ?.
-optionale Verkettung wie: if (x?.y)
sind ebenfalls sehr gute Optionen für 2020+.
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.