You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`WeakSet` -- особый вид `Set` не препятствующий сборщику мусора удалять свои элементы. То же самое -- `WeakMap` для `Map`.
206
+
`WeakSet` -- особый вид `Set`, не препятствующий сборщику мусора удалять свои элементы. То же самое -- `WeakMap` для `Map`.
207
207
208
208
То есть, если некий объект присутствует только в `WeakSet/WeakMap` -- он удаляется из памяти.
209
209
@@ -248,7 +248,7 @@ activeUsers.splice(0, 1); // Петя более не активный поль
248
248
249
249
У WeakMap есть ряд ограничений:
250
250
251
-
- Только объекты в качестве ключей.
251
+
- Только объекты в качестве ключей.
252
252
- Нет свойства `size`.
253
253
- Нельзя перебрать элементы итератором или `forEach`.
254
254
- Нет метода `clear()`.
@@ -261,7 +261,7 @@ activeUsers.splice(0, 1); // Петя более не активный поль
261
261
262
262
То же самое относится и к `WeakSet`: можно добавлять элементы, проверять их наличие, но нельзя получить их список и даже узнать количество.
263
263
264
-
Эти ограничения могут показаться неудобными, но по сути они не мешают `WeakMap/WeakSet` выполнять свою основную задачу -- быть "вторичным" хранилищем данных для объектов, актуальный список которых (и сами они) хранятся в каком-то другом месте.
264
+
Эти ограничения могут показаться неудобными, но, по сути, они не мешают `WeakMap/WeakSet` выполнять свою основную задачу -- быть "вторичным" хранилищем данных для объектов, актуальный список которых (и сами они) хранится в каком-то другом месте.
265
265
266
266
## Итого
267
267
@@ -272,6 +272,4 @@ activeUsers.splice(0, 1); // Петя более не активный поль
272
272
273
273
К примеру, в обычном объекте `Object` нельзя использовать "совершенно любые" ключи. Есть встроенные методы, и уж точно есть свойство с названием `__proto__`, которое зарезервировано системой. Если название ключа даётся посетителем сайта, то он может попытаться использовать такое свойство, заменить прототип, а это, при запуске JavaScript на сервере, уже может привести к серьёзным ошибкам.
274
274
275
-
-`WeakMap` и `WeakSet` -- "урезанные" по функционалу варианты `Map/Set`, которые позволяют только "точечно" обращаться к элементам (по конкретному ключу или значению). Они не препятствуют сборке мусора, то есть если ссылка на объект осталась только в `WeakSet/WeakMap` -- она будет удалена.
276
-
277
-
275
+
-`WeakMap` и `WeakSet` -- "урезанные" по функционалу варианты `Map/Set`, которые позволяют только "точечно" обращаться к элементам (по конкретному ключу или значению). Они не препятствуют сборке мусора, то есть, если ссылка на объект осталась только в `WeakSet/WeakMap` -- она будет удалена.
0 commit comments