Obiekty w JavaScript i skąd się bierze [object Object]

Przewodnik po obiektach w JavaScript

Obiekty w JavaScript: klucze, kopie i naprawa [object Object] | We.Inc

Twórz, czytaj, iteruj i kopiuj obiekty JavaScript oraz dowiedz się, dlaczego Twoja strona wyświetla [object Object] i jak pokazać prawdziwą wartość. Wklej dowolny JSON, aby zbadać go na żywo.

Obiekt JavaScript to zbiór nazwanych wartości zapisany jako { key: value }. Wartość odczytujesz przez obj.key lub obj['key'], klucze wypisujesz przez Object.keys, a pary przez Object.entries. Tekst [object Object] pojawia się, gdy obiekt zostaje zamieniony na string; aby wypisać jego zawartość, użyj JSON.stringify(obj).

Operacje na obiektach w skrócie

Obiekty to kształt, w jakim przychodzi niemal każda odpowiedź API, plik konfiguracyjny i prop w React. Ten przewodnik omawia garść operacji używanych codziennie, a potem dwie klasyczne niespodzianki: [object Object] pojawiające się na stronie lub w alercie oraz kopię, która po cichu dzieli zagnieżdżone dane z oryginałem.

Najczęściej zadawane pytania

Dlaczego mój kod wypisuje [object Object]?

Coś zamieniło obiekt na string: + z tekstem, template literal, alert, element.textContent lub innerText. Domyślny toString dla zwykłych obiektów zwraca stały tekst [object Object]. Zamiast tego wypisz JSON.stringify(obj) albo wybierz właściwość, o którą Ci chodziło, na przykład obj.name.

Jak iterować po obiekcie w JavaScript?

Użyj for (const [key, value] of Object.entries(obj)) { ... }. Zwykły obiekt nie jest iterowalny, więc for...of bezpośrednio na nim rzuca TypeError. for...in też działa, ale obejmuje dziedziczone klucze enumerable.

Jak skopiować obiekt, aby nie był powiązany z oryginałem?

Dla płaskiego obiektu wystarczy { ...obj } lub Object.assign({}, obj). Jeśli obiekt zawiera zagnieżdżone obiekty lub tablice, użyj structuredClone(obj), który kopiuje każdy poziom. Obsługuje Date, Map i Set, ale rzuca DataCloneError przy funkcjach i węzłach DOM.

Jak zamienić obiekt na tablicę i z powrotem?

Object.entries(obj) daje tablicę par [key, value]. Przekształć ją przez map lub filter, a potem odbuduj obiekt przez Object.fromEntries(pairs). To typowy sposób mapowania wartości obiektu.

Czym różni się obiekt od Map?

Map przyjmuje jako klucz dowolny typ, pamięta kolejność wstawiania wszystkich kluczy i ma właściwość size. Zwykłe obiekty używają kluczy typu string lub symbol i to je produkuje JSON. Pamiętaj, że JSON.stringify zamienia Map na {}, więc najpierw przekonwertuj ją przez Object.fromEntries(map).

Notacja kropkowa kontra nawiasy

Płytkie i głębokie kopie

Pokazywanie prawdziwej wartości zamiast [object Object]

Cztery sposoby wyświetlenia obiektu

Tylko pierwsza linia daje [object Object]. Pozostałe wypisują czytelną zawartość.

Ładne formatowanie na stronie

Element pre zachowuje łamania linii i wcięcia, które JSON.stringify dodaje dzięki trzeciemu argumentowi.

Przekształcanie obiektów przez entries i fromEntries

Dolicz podatek do każdej ceny

entries zamienia obiekt na pary, map zmienia każdą wartość, fromEntries buduje nowy obiekt.

Spread kontra structuredClone

Kopia przez spread współdzieli wewnętrzny obiekt address; klon nie.

Inspektor obiektów

Edytuj JSON i zobacz, jak każde podejście zamienia go na tekst lub listę.

Twój obiekt jako JSON

Niepoprawny JSON: {v}

To poprawny JSON, ale nie obiekt. Otocz go nawiasami klamrowymi.

Sposoby wyświetlenia obiektu

Kod

Wynik

Eksperyment z kopiowaniem

Zmień miasto w kopii, a potem sprawdź, czy oryginał też się zmienił.

Nowe miasto dla kopii

Zmień w kopii przez spread

Zmień w kopii przez structuredClone

Resetuj

original.address.city ma teraz wartość {v}

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony