5 rzeczy, które musisz wiedzieć o operatorze delete w JavaScript
W JavaScript, operator delete jest używany do usuwania właściwości obiektu. Po usunięciu danej właściwości, ta właściwość nie będzie dostępna i zwraca undefined
.
Wywołanie operatora delete
zwraca true
gdy usuwa właściwość i false
w przeciwnym wypadku. działa tylko na właściwości obiektu, nie ma wpływu na nazwy zmiennych lub funkcji.
Operator delete nie powinien być używany na predefiniowanych właściwościach obiektów JavaScript, takich jak window
Math
, i Date
obiekty. Może to spowodować awarię aplikacji.
Przeanalizujmy kilka faktów na temat operatora delete
.
Usuwanie właściwości obiektu
Jedynym sposobem na całkowite usunięcie właściwości obiektu w JavaScript jest użycie operatora delete
.
Jeśli właściwość, którą próbujesz usunąć, nie istnieje, delete nie będzie miało żadnego efektu i może zwrócić true.
Czy możemy usuwać zmienne w Javascript?
Operator delete usuwa właściwość z obiektu. Nie może usunąć zmiennej. Każda właściwość zadeklarowana za pomocą var
nie może być usunięta z zakresu globalnego lub zakresu funkcji.
Jeśli zadeklarujesz zmienną bez var, może ona zostać usunięta. Przyjrzyjmy się poniższemu przykładowi.
Zmienna zadeklarowana bez słowa kluczowego var
wewnętrznie przechowuje ją jako właściwość obiektu window
. Możemy więc usuwać właściwości obiektu window
.
Czy możemy usuwać wartości z tablicy?
Ponieważ tablice JavaScript są obiektami, elementy mogą być usuwane za pomocą delete
.
delete
spowoduje usunięcie właściwości obiektu, ale nie reindeksuje tablicy ani nie aktualizuje jej długości. Sprawia to wrażenie, że jest to undefined
.
Użycie delete
może pozostawić niezdefiniowane dziury w tablicy. Użyj pop()
shift()
, lub splice()
zamiast.
Czy możemy usunąć wbudowane obiekty?
Usuwanie wbudowanych obiektów jak np.w obiekty takie jak Math
Date
, oraz window
są niebezpieczne i mogą spowodować awarię całej aplikacji.
Usuwanie niekonfigurowalnych właściwości
Właściwości obiektów, oprócz value
, mają trzy specjalne atrybuty:
-
writable
– jeślitrue
, wartość może być zmieniona, w przeciwnym razie jest tylko do odczytu. -
enumerable
– jeślitrue
, to jest wymieniony w pętlach, w przeciwnym razie nie jest wymieniony. -
configurable
– jeżelitrue
, właściwość można usunąć lub zmienić jej atrybuty, w przeciwnym wypadku nie można jej zmienić.
Wartości przypisane za pomocą Object.defineProperty
i ustawione na configurable: false
w obiekcie nie mogą być usunięte.
W trybie ścisłym, rzuci błąd, jeśli spróbujesz usunąć właściwość, która nie jest konfigurowalna.
Wniosek
delete
jest jedynym prawdziwym sposobem na usunięcie właściwości obiektu bez żadnych pozostałości, ale działa ~100 razy wolniej, jeśli używasz delete
w pętlach.
Alternatywnym rozwiązaniem jest ustawienie wartości na un
zdefiniowane jak object = undefined
. Nie usuwa to całkowicie właściwości, po prostu ustawia wartość na undefined. wybór ten nie jest dokładnie wybitnym rozwiązaniem, ale jeśli wykorzystasz go z uwagą, będziesz w stanie poprawić wydajność.
To wszystko! Mam nadzieję, że ten tekst może pomóc w zrozumieniu operatora delete
Dzięki za przeczytanie 🙂