390 Stimmen

Wie man feststellt, ob ein Objekt eine bestimmte Eigenschaft in JavaScript hat

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?

706voto

gnarf Punkte 103284

Objekt hat Eigenschaft:

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')) { 
  // ......
}

Objekt oder sein Prototyp hat eine Eigenschaft:

Sie können die in Operator, um nach Eigenschaften zu suchen, die auch vererbt werden.

if ('y' in x) {
  // ......
}

95voto

Christian C. Salvadó Punkte 763569

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

15voto

nackjicholson Punkte 4149

Underscore.js oder Lodash

if (_.has(x, "y")) ...

:)

14voto

jpsimons Punkte 25636

Das kann man so ein bisschen zurechtstutzen:

if ( x.y !== undefined ) ...

6voto

J Rod Punkte 576

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.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