Wie kann ich feststellen, ob ein Objekt x
eine definierte Eigenschaft hat y
, unabhängig vom Wert von x.y
?
Ich benutze gerade
if (typeof(x.y) !== 'undefined')
aber das scheint ein bisschen klobig. Gibt es einen besseren Weg?
javascript
object
Royhowie
quelle
quelle
Object.prototype.hasOwnProperty.call(x, 'y')
damit die Eigenschaft "hasOwnProperty" nicht mit dem Inspektionsprozess in Konflikt steht;){}.hasOwnProperty.call(x, 'y')
.Wenn Sie wissen möchten, ob das Objekt die Antwort von property @ gnarf physisch enthält , wird die Arbeit erledigt
hasOwnProperty
.Wenn Sie wissen möchten, ob die Eigenschaft irgendwo vorhanden ist, entweder auf dem Objekt selbst oder in der Prototypenkette, können Sie den
in
Operator verwenden .Z.B.:
quelle
Underscore.js oder Lodash
:) :)
quelle
Object.prototype.hasOwnProperty.call(x, "y")
. Für Arrays denke ich , möchten Sie vielleichtArray.prototype.indexOf
,_.indexOf
oder_.contains
Sie können das ein bisschen wie folgt kürzen:
quelle
x = {y:undefined}
Ein Merkmal meines ursprünglichen Codes
In einigen Situationen kann dies nützlich sein, da die Verwendung sicher ist, unabhängig davon, ob sie
x
vorhanden ist oder nicht. Bei beiden Methoden in der Antwort von Gnarf sollte zunächst geprüft werden,x
ob Zweifel bestehen.Vielleicht haben alle drei Methoden einen Platz in der Trickkiste.
quelle
(x && x.hasOwnProperty('y'))
oder(x && 'y' in x)
ReferenceError
anstelle der Zeichenfolge 'undefined' einen zurückDa die Frage die Unbeholfenheit der Eigenschaftsprüfung betraf und ein regelmäßiger Verwendungszweck die Validierung von Objekten mit Funktionsargumentoptionen war, dachte ich, ich würde eine bibliotheksfreie Kurzmethode zum Testen der Existenz mehrerer Eigenschaften erwähnen. Haftungsausschluss: Es erfordert ECMAScript 5 (aber IMO verdient jeder, der noch IE8 verwendet, ein kaputtes Web).
quelle
Warum nicht einfach:
Oder wenn Sie einen bestimmten Typ erwarten:
quelle
x.hasOwnProperty('y')
?