Załóżmy, że masz taki obiekt javascript:
var data = { foo: 'bar', baz: 'quux' };
Dostęp do właściwości można uzyskać poprzez nazwę właściwości:
var foo = data.foo;
var baz = data["baz"];
Ale czy można uzyskać te wartości, jeśli nie znasz nazwy właściwości? Czy nieuporządkowany charakter tych właściwości uniemożliwia ich odróżnienie?
W moim przypadku myślę konkretnie o sytuacji, w której funkcja musi zaakceptować serię par nazwa-wartość, ale nazwy właściwości mogą się zmienić.
Moje przemyślenia na temat tego, jak to zrobić do tej pory, to przekazanie nazw właściwości do funkcji wraz z danymi, ale wydaje się, że to hack. Wolałbym to zrobić z introspekcją, jeśli to możliwe.
źródło
Stare wersje JavaScript (<ES5) wymagają użycia
for..in
pętli:ES5 wprowadza Object.keys i Array # forEach, co sprawia, że jest to trochę łatwiejsze:
ES2017 wprowadza
Object.values
iObject.entries
.źródło
źródło
Często będziesz chciał zbadać określone właściwości wystąpienia obiektu bez wszystkich jego współdzielonych metod i właściwości prototypowych:
źródło
Spowoduje to pobranie wszystkich właściwości i ich wartości (odziedziczone lub własne, wyliczalne lub nie) w nowym obiekcie. oryginalny obiekt jest nietknięty. Teraz można przejść przez nowy obiekt za pomocą
źródło
źródło
.hasOwnProperty()
gdy używasz for in do iteracji obiektu.hasOwnProperty()
metoda zwracaboolean
wskazuje, czy obiekt ma określona właściwość jako swoją własność (w przeciwieństwie do dziedziczenia go) . zobacz ten przykładMożesz użyć Object.keys () , "który zwraca tablicę własnych wyliczalnych nazw właściwości danego obiektu, w tej samej kolejności, w jakiej otrzymujemy w normalnej pętli."
Możesz użyć dowolnego przedmiotu zamiast
stats
:źródło
Object.keys( stats )[key]
nie ma sensu, zawsze będzieundefined
.źródło