Podsumowanie: w tym samouczku dowiesz się, jak kopiować obiekty w JavaScript, w tym shallow copy I deep copy., Aby skopiować obiekt w JavaScript, masz trzy opcje:
- użyj składni spread (
...
) - użyj
Object.assign()
metoda - użyj
JSON.stringify()
IJSON.parse()
metody
Poniższe ilustracje ilustrują, jak skopiować obiekt przy użyciu trzech powyższych metod:
zarówno spread (...
), jak i Object.assign()
wykonują płytką kopię, podczas gdy metody JSON przenoszą głęboką kopię.
Płytka Kopia vs., deep copy
w JavaScript używa się zmiennych do przechowywania wartości, które mogą być prymitywne lub odniesienia. Podczas tworzenia kopii wartości przechowywanej w zmiennej tworzy się nową zmienną o tej samej wartości. Dla pierwotnej wartości, wystarczy użyć prostego przypisania:
Code language: JavaScript (javascript)
i po zmianie wartości skopiowanej zmiennej, wartość oryginału pozostaje taka sama.
Code language: JavaScript (javascript)
Wyjście:
jednak, jeśli użyjesz operatora przypisania dla wartości referencyjnej, nie skopiuje ona wartości., Zamiast tego obie zmienne będą odwoływać się do tego samego obiektu w pamięci:
Code language: JavaScript (javascript)
i kiedy uzyskasz dostęp do obiektu poprzez nową zmienną (copiedPerson) i zmienisz wartość jego właściwości (name), zmienisz wartość właściwości obiektu.
Code language: JavaScript (javascript)
Wyjście:
Code language: CSS (css)
Głębokie kopiowanie oznacza, że wartość nowej zmiennej jest odłączona od oryginalnej zmiennej, podczas gdy płytka Kopia oznacza, że niektóre wartości są nadal podłączone do oryginalnej zmiennej.,
przykład kopiowania płytkiego
rozważ następujący przykład:
w tym przykładzie:
- najpierw Utwórz nowy obiekt o nazwie
person
. - Po Drugie, Sklonuj obiekt
person
używając metodyObject.assign()
. - Po Trzecie, Zmień imię i adres obiektu
copiedPerson
.,
tutaj jest wyjście:
jednak, gdy pokażesz wartości obiektu person, zobaczysz, że informacje o adresie uległy zmianie, ale imię:
Code language: JavaScript (javascript)
Wyjście:
powodem jest to, że adres jest wartością referencyjną, podczas gdy imię jest prymitywną wartością. Oba person
I copiedPerson
odwołują się do różnych obiektów, ale te obiekty odwołują się do tych samych obiektówaddress
.,
przykład głębokiego kopiowania
poniższy fragment zastępuje Object.assign()
metodą JSON w celu przenoszenia głębokiego kopiowania person
obiekt:
wyjście
Code language: CSS (css)
w tym przykład, wszystkie wartości w obiekcie copiedPerson
są odłączone od oryginalnego obiektu person
. W tym samouczku nauczyłeś się, jak kopiować obiekty w JavaScript za pomocą płytkiej lub głębokiej kopii.
- czy ten tutorial był pomocny ?
- YesNo