Jak mogę ustalić, czy obiekt x
ma zdefiniowaną właściwość y
, niezależnie od wartości x.y
?
Obecnie używam
if (typeof(x.y) !== 'undefined')
ale to wydaje się trochę niezgrabne. Czy jest lepszy sposób?
javascript
object
royhowie
źródło
źródło
Object.prototype.hasOwnProperty.call(x, 'y')
aby właściwość o nazwie „hasOwnProperty” nie kolidowała z procesem inspekcji;){}.hasOwnProperty.call(x, 'y')
.Jeśli chcesz wiedzieć, czy obiekt fizycznie zawiera właściwość @ gnarf, skorzystaj z odpowiedzi
hasOwnProperty
.Jeśli chcesz wiedzieć, czy właściwość istnieje gdziekolwiek, na samym obiekcie lub w łańcuchu prototypów, możesz użyć
in
operatora .Na przykład.:
źródło
Underscore.js lub Lodash
:)
źródło
Object.prototype.hasOwnProperty.call(x, "y")
. Dla tablic myślę, że chceszArray.prototype.indexOf
,_.indexOf
lub_.contains
Możesz to trochę przyciąć w ten sposób:
źródło
x = {y:undefined}
Jedna cecha mojego oryginalnego kodu
w niektórych sytuacjach może być użyteczne to, że można bezpiecznie używać, czy
x
istnieje, czy nie. W przypadku jednej z metod zawartych w odpowiedzi gnarf należy najpierw sprawdzić,x
czy istnieją wątpliwości, czy istnieje.Być może więc wszystkie trzy metody mają miejsce w woreczku sztuczek.
źródło
(x && x.hasOwnProperty('y'))
or(x && 'y' in x)
ReferenceError
raczej niż ciąg „undefined”Ponieważ pytanie dotyczyło niezgrabności sprawdzania właściwości, a jedną regularną sprawą do tego jest sprawdzanie poprawności obiektów argumentów funkcji, pomyślałem, że wspomnę o bezbibliotecznym krótkim sposobie testowania istnienia wielu właściwości. Oświadczenie: Wymaga ECMAScript 5 (ale IMO, kto nadal używa IE8, zasługuje na zepsutą sieć).
źródło
Dlaczego nie po prostu:
Lub jeśli oczekujesz określonego typu:
źródło
x.hasOwnProperty('y')
?