Урок 13. JavaScript. Все о Map, Set, WeakMap, WeakSet с примерами

Поделиться
HTML-код
  • Опубликовано: 25 сен 2019
  • Получить профессию Frontend разработчика -
    bit.ly/3OEXwnG
    Подробнее узнать об обучении в Result School -
    bit.ly/3y1ysQJ
    Бесплатный курс HTML & CSS - bit.ly/3OqMvqj
    Сделать 5 проектов на JavaScript - bit.ly/3bxl930
    Я в соц сетях:
    Telegram: t.me/js_by_vladilen
    VK: vladilen.minin
    Instagram: / vladilen.minin
    Мои паблики по JavaScript:
    Telegram: t.me/result_school_it
    VK: result.school
    Instagram: / result.scho. .
    JavaScript cообщества:
    Discord: / discord
    Telegram: t.me/js_by_vladilen_chat
    Roadmap по каналу:
    vladilen.notion.site/Roadmap-...
    Урок 13. JavaScript. Все о Map, Set, WeakMap, WeakSet с примерами
    Сложный JavaScript простым языком:
    • Урок 1. JavaScript. Чт...

Комментарии • 214

  • @VladilenMinin
    @VladilenMinin  4 года назад +600

    Полезен контент по чистому JS?

    • @Cobr3nn
      @Cobr3nn 4 года назад +9

      да огонь) на практике правильно крайне редко юзаю это) может пора исправлятся

    • @promax866
      @promax866 4 года назад +2

      Да!!! Спасибо за видос!

    • @eugenenovikov671
      @eugenenovikov671 4 года назад +2

      на собеседованиях всегда спрашивают сначала чистый JS

    • @user-ip2vy7zd6o
      @user-ip2vy7zd6o 4 года назад +1

      Более чем!

    • @johnd1431
      @johnd1431 4 года назад +1

      Еще как!

  • @razumizm
    @razumizm 4 года назад +150

    Влад, позволю себе указать на неточность в уроке. Когда ты сравниваешь Map и WeakMap, то проверяешь наличие обнуленных объектов (obj = null) внутри Map и WeakMap через методы get и has. Но в случаях обоих объектов эти методы будут одинаково возвращать undefind и false, соответственно. Тут нет никакой разницы, ведь мы одинакого перестаем получать доступ к ключу-объекту, так как удалили ссылку на него.
    Для демонстрации разницы нужно было показывать содержимое самих объектов. В случае с Map ключ-объект будет оставаться внутри объекта Map, тем самым занимая память мертвым грузом, а в случае с WeakMap ключ-объект будет пропадать из [[Entries]], освобождая память от мусора. Это, на мой взгляд, наглядно бы показало разницу.
    Нюанс в том, что исчезать из WeakMap объекта обнуленный ключ-объект будет не сразу. Мне пришлось много раз обновить браузер, чтобы увидеть очищенный WeakMap объект.
    Об этой особенности ты тоже говоришь, что время, за которое будет удален скам не определено, поэтому отсутствует метод size. И обновление браузера это наглядно показало.
    Благодарю за твою работу и желаю и дальше делать упор на качество, не поддаваясь соблазну удариться в инфоциганство, которым и так завален ютьюб. Лучше меньше, да лучше. ИМХО. В этом заключается уникальность в современных реалиях.

    • @aboba86468
      @aboba86468 3 года назад

      Мне кажется, у вас тоже неточность: "В случае с Map ключ-объект будет оставаться.." здесь уже не ключ-объект остаётся, а его значение, ведь вы же сами написали "мы одинаково перестаем получать доступ к ключу-объекту, так как удалили ссылку на него". Ну и то же самое с WeakMap.

    • @vadmanx8173
      @vadmanx8173 3 года назад +15

      Неточность в том, что Влад пытается получить значение для удаленного объекта из WeakMap используя значение null, т.к. именно null он записал в переменную, хранившую ссылку на удаленный объект, а по значению null конечно WeakMap ничего не выдаст, т.к. null не валидный ключ для WeakMap. (к слову с Map такое сделать можно, записав какое-то другое значение по ключу null и в этом случае мы и получим это другое значение). WeakMap не имеет методов size, entries и keys, так что проверить, что удаленый объект действительно был удален из WeakMap не получится.
      Похожая ошибка и с WeakSet структурой. Влад удаляет второй элемент из массива, при этом место второго элемента занимает третий элемент. Следовательно, после удаления второго элемента Влад пытается проверить наличие значения третьего элемента из массива, которого там конечно нет, т.к. он его туда не добавлял.

    • @user-ee6ft7ye7i
      @user-ee6ft7ye7i 3 года назад +3

      Тоже обратил на это внимание и считаю, что лучше было продемонстрировать содержимое карт. Но мне интереснее было в каком виде в Map остается элемент с обнуленным ключем-обьектом. Нужно понимать последствия этого и как подстраховаться при необходимости использования таких карт со смешанными ключами.

    • @ArtiomNeganov
      @ArtiomNeganov 2 года назад +4

      Ребят, вы такие классные, любите сочинения писать. Нет чтобы ссылку на sandbox разместить. Или если ссылки режутся, то просто кусок кода. Но за наблюдение спасибо, я бы пропустил. Это реально ошибка, а не неточность, не знаю чего тут расшаркиваться. И что-то не наблюдаю автора, посыпающего голову пеплом :)

  • @userman6193
    @userman6193 Год назад +1

    Спасибо. Фактически у вас, Владилен, уникальный контент по JS, за это отдельное спасибо. Успехов во всём).

  • @andriy1229
    @andriy1229 3 года назад +2

    Влад, огромная благодарность за урок!

  • @Civilizer1976
    @Civilizer1976 3 года назад +3

    Отлично, идём дальше. "дорогу осилит идущий".

  • @user-eo4rp8fd8n
    @user-eo4rp8fd8n 4 года назад +2

    Владилен, привет. Отличный урок , спасибо.

  • @romanmed9035
    @romanmed9035 3 года назад

    программеров хороших немало. но так чтобы смог понятно рассказать единицы. и автор к радости тех кто смотрит это видео таковым как раз является. что дает возможность еще большему числу людей постигнуть программирование и яваскрипт в частности.

  • @KomAlexei
    @KomAlexei 2 года назад

    Спасибо! Как всегда очень доступно и полезно!

  • @user-cx4ih7wv6i
    @user-cx4ih7wv6i 3 года назад +1

    Дай Бог тебе здоровья.

  • @afterseks
    @afterseks 4 года назад +3

    ты топ! делай чаще )) спасибо большое !

  • @lockd0wnll178
    @lockd0wnll178 4 года назад +2

    Лучший урок по этой теме на ютубе. Спасибо

  • @dinmukhamedamirov2704
    @dinmukhamedamirov2704 9 месяцев назад

    Благодарю! Объяснено просто и понятно.

  • @artempaskal7986
    @artempaskal7986 2 года назад

    Дай тебе Бог здоровья!!!

  • @dfdf6381
    @dfdf6381 3 года назад +1

    Огромное спасибо. Не как не мог понять тему, много где смотрел искал а тут сразу все ясно и понятно. Спасибо огромное.

  • @deuriy
    @deuriy 4 года назад +8

    Надо же ) А я как раз сегодня эту тему изучал )
    Но за урок спасибо.👍

  • @user-kq1ei8wk4c
    @user-kq1ei8wk4c 4 года назад +58

    Хорошо, что в видеороликах нет фоновой музыки, реально бесит

  • @kazikhangereykhanov4781
    @kazikhangereykhanov4781 4 года назад +13

    Нравится что ты не опускаешь детали и говоришь подробно как в книжке.
    Привет из Дагестана)))

    • @user-sj3qt7wu9c
      @user-sj3qt7wu9c Год назад

      c какого города?

    • @404Negative
      @404Negative 26 дней назад

      @@user-sj3qt7wu9c Нижние Дагестаны

  • @AsVit
    @AsVit 4 года назад

    Фух.. Урок пройден) Спасибо большое!

  • @nursaidnursaid7303
    @nursaidnursaid7303 4 года назад +2

    Спасибо за уроки

  • @danilkochnev8162
    @danilkochnev8162 4 года назад

    Отличные уроки!

  • @karfagen86
    @karfagen86 4 года назад

    Я все время думал, что я хорошо разбираюсь в js, но по видео стало понятно, что есть еще чему поучиться! Спасибо Владилен )

  • @temeralin.t
    @temeralin.t 3 года назад

    Владилен лучший!

  • @asylzhanb2325
    @asylzhanb2325 4 года назад +22

    Жду экскурсию про next.js, на мой взгляд было бы интересно, а так с меня лайк, жаль нельзя лайкануть 10 раз))

    • @SlavaCh
      @SlavaCh 4 года назад +2

      Почему же, сделайте 10 аккаунтов и лайкайте на здоровье, было бы желание 😉

  • @nikolaikharkevich4736
    @nikolaikharkevich4736 5 месяцев назад

    Спасибо за урок!)

  • @RewCSharp
    @RewCSharp 5 месяцев назад

    Спасибо за урок!

  • @rinatvaliullov3247
    @rinatvaliullov3247 4 года назад

    Как всегда очень информативно и без теоретической нудятины. Спасибо за урок, Владилен. Единственное, что хотелось бы видеть больше - это больше примеров.

  • @aitbayseiduldayev2363
    @aitbayseiduldayev2363 4 года назад

    Ассаляму Алейкум ! Давно не встречал такой хороший контент. Коротко и ясно. Спасибо большое. Сейчас начал разрабатывать сервисы на Node JS + Postgres Sql для мобильных приложении. Говорят Potgres Sql самый стабильный движок для BigData. Но пока чайник в этом деле. Буду очень благодарен, если сделаешь пару тройку уроков по данной теме. Еще раз спасибо.

  • @filcondrat
    @filcondrat 4 года назад +2

    отличный урок
    интересно было бы увидеть что нибудь по xss либо по jwt

  • @pavelzakharov4752
    @pavelzakharov4752 4 года назад +13

    Изучаю сейчас JS по сайту-учебнику. Читал эти map и set - нихера не мог понять. Очень поверхностно дано без углубления.
    Нашел твой блог, посмотрел. Вернулся к учебнику, ибо там практические полезные задания и продолжил читать - после твоего видео сразу всё стало понятно!
    Дружище, ты крут. Очень хорошая подача с качественным объяснением. Спасибо!!!
    Лучи добра тебе в карму.

    • @MrJustice
      @MrJustice 4 года назад

      А можешь сказать, пожалуйста как учебник называется?

    • @MrJustice
      @MrJustice 4 года назад

      @@pavelzakharov4752 спасибо!

    • @elmaga4486
      @elmaga4486 4 года назад

      @@pavelzakharov4752 как успехи? просто я сам учу js на этом сайте

    • @elmaga4486
      @elmaga4486 4 года назад

      @@MrJustice друг ты на какой теме? может вместе попробуем объясняя друг другу

    • @pavelzakharov4752
      @pavelzakharov4752 4 года назад

      @@elmaga4486 нормально. Я уже реакт заканчиваю, пилю всякие мелкие приложухи для портфолио, ищу джунскую работу. Надо хуки да редакс сейчас освоить

  • @sergeyplotnikov5031
    @sergeyplotnikov5031 Год назад

    Очень классный пример с кэшированием пользователей

  • @doomymax577
    @doomymax577 4 года назад +1

    Как всегда полезно, сделай урок по дебагу JS

  • @teymurtarasov9014
    @teymurtarasov9014 3 года назад

    Очень годно. Спасибо

  • @s.konstantin
    @s.konstantin 4 года назад

    Спасибо за разъяснение

  • @serhiip5206
    @serhiip5206 Год назад +1

    set упрощает жизнь на порядок в плане перебора и сравнения

  • @gravitation-ether242
    @gravitation-ether242 2 года назад +1

    всегда читаю литературу все вроде ясно и понятно но повторение информации в твоем воспроизведении меняет восприятие и понимание темы все просто рахмет

  • @vladimirww5152
    @vladimirww5152 3 года назад

    Полезно!

  • @Max-kr4ie
    @Max-kr4ie 4 года назад +5

    Спасибо. Все очень хорошо и глубоко раскрыто, примеров бы побольше в проекте бы пусть и небольшом

    • @VladilenMinin
      @VladilenMinin  4 года назад +1

      Будет практика позже)

  • @yakut54
    @yakut54 4 года назад +2

    Заранее лайк )

  • @maximminchenko7633
    @maximminchenko7633 4 года назад

    Number.MAX_SAFE_INTEGER раз спасибо тебе за твой труд Владилен!

  • @nikita_kabuu
    @nikita_kabuu Год назад

    Спасибо большое

  • @OinkieP1e
    @OinkieP1e 5 месяцев назад

    Я заметил что между прошлой частью и этой у Владилена произошел день рождения)

  • @karlenkm4230
    @karlenkm4230 4 года назад

    spasiba!!! vsyo maximalna panyatna

  • @alexvladi4157
    @alexvladi4157 4 года назад +3

    было бы шикарно сделать плейлист полностью по всем темам JS и с большим количеством примеров, почему то большинство авторов делает видео для новичков, потом для продвинутых, а потом разбирают фреймворки, без последовательности (

  • @Stan9326
    @Stan9326 4 года назад

    Спасибо!

  • @user-xt2pj7rb9e
    @user-xt2pj7rb9e 4 года назад

    Сделай видео по шаблонам проектирования, которые используются в разработке на node js или express или koa

  • @artemijeka
    @artemijeka 2 года назад

    спасибо

  • @Denis-db4yn
    @Denis-db4yn 4 года назад +12

    Спасибо! Не мог бы ты сделать урок по работе GIT в WebStorm? :)

  • @user-bh2ge1mu9x
    @user-bh2ge1mu9x 9 месяцев назад

    Очень классно спасибо! Единственно, были досадные ошибки в конце, когда отсутствие элементов в weakmap, weakset объясняется через .has() == false от новых ключей null и от users[1] - Irina, Я выводил в консоль weakmap до и после obj = null он в обоих показывал только один элемент, что странно (было же 2 в начале). добавил задержки через циклы до 1000, стал показывать всегда оба. Приходится только верить что GC действительно их чистит :)

  • @user-cl4qx9wn1i
    @user-cl4qx9wn1i 4 года назад +1

    Очень нравится ваша манера подачи материала. Достаточно информативно, и без лишний воды. Видел есть видео 40 вопросов по ангуляру, не думала сделать аналоничное видел по React ?

  • @Civilizer1976
    @Civilizer1976 3 года назад

    На 15:15 для правильного отображения вывода:
    console.log(key, val)

  • @shutterradio
    @shutterradio 3 года назад

    Спсибо, теперь еще меньше белых пятен в понимании js

  • @pitermelnyk619
    @pitermelnyk619 4 года назад

    желательно было бы сделать по NodeJS не как сервер, а как простая консольная монолитная программа, с использованием Mysql и минимум всяких сторонних модулей, и как очень желательный бонус будет то чтоб рассказать о то как запускать дочерние процессы, как с ними общаться так как есть как минимум 4 варианта запуска, а вот процесс "общение" очень слабо освещено в материалах.
    Успехов твоему каналу!
    Тут наверное каждому будет что-то себе почерпнуть, так как "копаешь" не слабо а подаешь материал с лёгкостью !)

  • @MAKSIMTSA
    @MAKSIMTSA 2 года назад +7

    Хороший ролик! Только структуры WeakMap и WeakSet называются слабыми, потому что ссылки на объекты-ключи хранятся «слабо», что означает то, что они не предотвратят сборку мусора в том случае, если других ссылок на объект не будет.

  • @user-mk1te5wp3f
    @user-mk1te5wp3f 2 года назад

    Владилен, спасибо за информацию. Единственное WeakMap отслеживает свои объекты-ключи на изменение и полей объекта, так и ссылки на объект, а WeakSet следит только за ссылками и изменение полей объекта-ключа допускаются.

  • @user-ik8rn3lp7u
    @user-ik8rn3lp7u 2 месяца назад

    Я только сейчас узнал что назначение переменной значения null не ведёт к разрыву связи с объектом. А чтобы полностью разорвать связь с объектом нужно присваивать undefined вместо null, только в этом случае консоль выведет undefined, что означает что объект был удалён из памяти.

  • @user-QesOrwuMqN
    @user-QesOrwuMqN 3 года назад

    Скорее всего Set отнаследован от Map внутри, я бы так по крайней мере реализовывал, только в качестве ключа нужно использовать значение

  • @hi-tech4143
    @hi-tech4143 3 года назад +2

    Владилен, да ну неправду Вы говорите. Если сделать obj = null, то в WeakMap останется { name: "weakmap" } → "obj data" и на память это никак не повлияет. Ваше утверждение примером, что если проверить по console.log(map.has(obj)) всегда будет false, потому что map.has(null) кроме false никогда ничего другого и не вернет (( Тоже самое с примерами lena = null, достаточно сделать console.log(cashe) и убедится, что все на своих местах ))

  • @Civilizer1976
    @Civilizer1976 3 года назад

    Для автоматической перезагрузки терминала в VSCode используйте nodemon

    • @ArturKRG
      @ArturKRG 3 года назад

      У меня почему-то он не работает. После первой же перезагрузки страницы в бразуере крашится

  • @AlinaLozyuk
    @AlinaLozyuk 4 дня назад

    WeakMap называется weak не потому что у него урезанная функциональность, а потому что WeakMap работает со слабыми ссылками.
    Сильная ссылка - ссылка которая, не дает gc удалить какой-то объект, если на него есть хоть 1 сильная ссылка.
    Слабая ссылка, напротив, позволяет указывать на объект, не предотвращая его автоматическое освобождение сборщиком мусора.

  • @DRanduletti
    @DRanduletti 3 года назад

    было бы круто выложить исходники на github.

  • @Peter-vz4tb
    @Peter-vz4tb 4 года назад +2

    В свое время купил курс автора по NUXT.js и все бы хорошо но столкнулся проблемой с деплоем приложения на VPS.
    Начал разбираться в теме а там гиблый лес: nginx, pm2 и другие радости.
    Я конечно понимаю что есть проффесия DevOps но если такого спеца по рукой нет а доделать надо (клиенту не объяснишь что не можешь)?
    Хотелось бы увидеть курс по деплою node.js приложения. Можно даже платный, можно даже не полный, но чтобы работало.
    Заране благодарен.
    P.S. Я задеплоил с помощью npm run generate но это скорее костыль чем решение.

  • @user-fx8rm4kw2y
    @user-fx8rm4kw2y 4 года назад +1

    Владилен, кинь криптокошель. Контент очень стоящий. будем донатить на развитие.

    • @VladilenMinin
      @VladilenMinin  4 года назад +1

      ЯД 410013757655670
      Или в вк :)

    • @user-fx8rm4kw2y
      @user-fx8rm4kw2y 4 года назад

      @@VladilenMinin а эфир или бтс. ? так проще)))

    • @VladilenMinin
      @VladilenMinin  4 года назад

      @@user-fx8rm4kw2y Думаю, что заведу. Благодарю)

  • @user-bi4vn3bs3l
    @user-bi4vn3bs3l 4 года назад +1

    Я не уверен, что при использовании weakmap память очищается после удаления его элементов. Weakmap не отображает удаленные элементы в пределах своей видимости, а не в пределах области всей памяти. Надо попробовать дважды законстантить один из его элементов и посмотреть что будет с константами после очищения weakmap. Думаю, одна ссылка все же останется на обьекте. Наверно лучше применять область видимости, чтобы JS сам подчищал память без всякого обнуления. Поставить фигурные скобки на части кода, и JS поймет где и что почистить.

  • @daniilrozhok336
    @daniilrozhok336 4 года назад +4

    ответь пожалуйста)
    в описании под видео список курсов по Angular 8+, ReactJS, NuxtJS + NodeJS,
    вопрос: эти курсы от тебя(т.е если я куплю курс я буду слышать тот же голос и это будешь ты)?

  • @MaxKievSky
    @MaxKievSky 3 года назад

    В каких случая ключом может быть объект с другими ключами и значениями в обьекте "new Map" и для чего это нужно из опыта?

  • @fedoskamcha3768
    @fedoskamcha3768 Год назад

    🖤🖤🖤🖤

  • @val9489
    @val9489 4 года назад +1

    Все очень классно, но на 36:18 мы спрашиваем у cache значение по ключу null, логично, что там его нет, мы ведь обнулили Лену :)
    Но не важно, смысл понятен.
    И еще, правильно понимаю, что set, как и в Java, по сути внутри себя представляет map, но в отличие от Java, где она в значение сует dummy object, set в JS просто дублирует туда значение ключа?

    • @darkwilder9459
      @darkwilder9459 3 года назад

      теперь можно назвать переменную Putin и обнулить её)

  • @user-bx7ly2th3b
    @user-bx7ly2th3b 4 года назад +3

    досмотрел до 31й минуты пока что (смотрю медленно, через паузы, все разбираю сам, пишу свой код, проверяю) ... не понмаю какой смысл делать объект ключем?
    может быть расскажете, каким образом это используется в реалности? Почему те же timestamp'ы не добавить в исходный объект/массив, как array['timestamp'] = Date.now();?

  • @cyclopentanpergidrophenantren
    @cyclopentanpergidrophenantren 4 года назад

    Смотрел видео, вспоминал Python 3. Думал все методы с него взяли от Set. Но к сожалению не хватает set.update(other, ...); - объединение, set.intersection_update(other, ...); - пересечение, • set.difference_update(other, ...) - вычитание, set.symmetric_difference_update(other); - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих. Это надо было сделать. Явно прослеживается прогресс языка. Пойду посмотрю на js ES6 классы, может человеческое наследование завезли и типы свойств и методов типа privet, public, protected, etc

    • @ScaleChannel
      @ScaleChannel 4 года назад

      Это тебе к typescript )

  • @konstantinmohin5989
    @konstantinmohin5989 4 года назад

    ^+Shift+R

  • @razumizm
    @razumizm 4 года назад

    Таким образом, чтобы создать Map из обычного объекта (прототип которого не содержит Symbol.iterator), нужно сначала объект превратить в массив, с помощью Object.entries(obj), а уже потом new Map(arrObj)? Правильно ли я понял? Благодарю за отличный урок.

  • @ManOnHorizon
    @ManOnHorizon 3 года назад

    39:16 - суть действий верная, но небольшая ремарка по объяснению:
    на 14-й строке мы проверяем наличие не того, что было users[1], а того, что им стало после splice (а изначально было users[2])
    No disrespect - смотрю твои ролики не первый день подряд запоем: много пробелов удаётся закрыть.
    И вообще контент просто восхитительный: как ты сегодня правильно сказал, никакой воды - всё по делу. Огромное спасибо!
    (Просто трудно было промолчать и пройти мимо...)

  • @user-ss7bm2id5c
    @user-ss7bm2id5c 2 года назад +1

    когда задал константу map как объект класса Map, в консоле появилась ошибка "Uncaught TypeError: Iterator value undefined is not an entry object
    at new Map ()". Подскажите пожалуйста, в чем может быть проблема?

  • @vemirxachatryan8371
    @vemirxachatryan8371 3 года назад

    Привет, спасибо за урок,
    а почему когда я запускаю код в браузере то в console.log()- е у WeakMap не проподает ключ ( обьект который null )
    а когда запускаю код в терминале с помощю node-js тогда проподает

  • @fafad2130
    @fafad2130 4 года назад

    Владилен, а в ближайшее время вы планируете создание фреймворка или нет?

    • @VladilenMinin
      @VladilenMinin  4 года назад +2

      Да, планирую создание чего-то крутого на чистом языке. Возможно сразу на ФП

  • @iDzmitry
    @iDzmitry 4 года назад +6

    Спасибо за видео!
    Правда, у меня возник вопрос с примером про кэш и WeakMap;
    Если заменить WeakMap на Map, т.е. let cashe = new Map();
    То после операции lena = null результотом работы
    console.log( cashe.has(lena) );
    все равно будет false, т.е. такой же результат как и с WeakMap
    По задумке примера результат должен был быть true, если использовать Map ?

    • @tkachis
      @tkachis 4 года назад +18

      Нет. Что используя Map, что WeakMap, после "удаления" ключ-объекта и вызова метода has у карты, ты ищешь по "null", следовательно он тебе и возвращает false. Разница лишь в том, что в Map поле с этим ключ-объектом и значение по этому ключ-объекту - сохранилось. Но, так как у тебя этого объекта уже нет, получить это значение ты не сможешь. Получается, что у тебя в коде находится сущность, доступа к которой у тебя нет, но память она занимает. От сюда и "утечка памяти". Но, если взять пример с WeakMap, сборщик мусора JS, после удаления объекта (который выступал в качестве ключ-объекта в WeakMap) автоматически очищает это поле из WeakMap. Следовательно, никакой утечки памяти.
      А теперь представь, что у тебя таких объектов 10тыс. ---> вот тебе и профит.
      Надеюсь ответ еще был актуален)

    • @iDzmitry
      @iDzmitry 4 года назад

      @@tkachis Спасибо огромное) ответ актуален!

    • @Dimonina
      @Dimonina 4 года назад

      @@tkachis спасибо что кто-то это написал, потому что пример в видео некорректен

    • @olegspytsia8524
      @olegspytsia8524 3 года назад +1

      А если после присвоения объекту который выступал в качестве ключа null просто вывести содержимое карты console.log(cache) - ничего не очистилось даже если это WeakMap...

  • @eugenenovikov671
    @eugenenovikov671 4 года назад +2

    Владилен, прикрепляйте, пожалуйста, под видео не ссылку на само это видео - ЭТО БЕССМЫСЛЕННО, а ссылку на плейлист.

    • @VladilenMinin
      @VladilenMinin  4 года назад +1

      Попробую, благодарю

    • @serhiipeksymov3739
      @serhiipeksymov3739 3 года назад

      Поддерживаю. А то очень не удобно потом искать эти ссылки. Весьма полезные

  • @user-zz4xn2to4y
    @user-zz4xn2to4y 2 месяца назад

    Я проверил только что 'Мap' в случае удаления последней ссылки на 'obj' так же как 'Weakmap' остается без ключа и доступа к значению. по сути они в этом плане одинаково работают.

  • @raizordano9050
    @raizordano9050 Год назад

    Ребят, подскажите, с чем связана ошибка: ReferenceError: obj is not defined
    at Object. (появилась, когда в методе WeakMap задал объект и сделал вызов)?

  • @GrantDrawChannel
    @GrantDrawChannel 2 года назад +1

    20:30 окей, а почемубы не добавить поле в обьекты масива users?

  • @user-yb8zd6gj2f
    @user-yb8zd6gj2f Год назад

    Владилен в конце не понял один момент, после использования метод split() на переменой с пользователями, мы хоть и получаем false при проверке через visits.has(users[1]), но если в конце вывести console.log(visits) там всё равно будут присутствовать всё те же два значения как и до метода split(). Почему так ?

    • @vladkonev3966
      @vladkonev3966 6 месяцев назад

      в users лежит 3 пользователя, split() удалил одного

  • @gorbulevsv
    @gorbulevsv 2 года назад

    Не хочется отвлекать, но вдруг кому-то захочется ответить. Вопрос: получается, что простой коллекции, без доп. функционала, типа хранение только уникальных значений, в js нет, и я должен пользоваться обычным массивом?

  • @overseer7591
    @overseer7591 2 года назад

    вроде норм, а можно уроки организовать на реальных примерах + домашка?

  • @Civilizer1976
    @Civilizer1976 3 года назад

    Если кто-то в начале видео не понял и впал в прострацию - поясню:
    Для конвертации Объект -> Массив создаём объект со значениями и пустой массив по типу const entries = []
    И на оборот при конвертации Массив -> Объект создаём массив из массивов и пустой объект по типу const obj = {}

  • @yaroslavqwerty8609
    @yaroslavqwerty8609 3 года назад

    31:50 че за фигня, в обычном map так же работает. После присваивания объекта к null, у обычного map, так же при вызове map.get(obj) вернется undefined

  • @vanGe1ion
    @vanGe1ion 3 года назад

    в WeakMap'е некорректно искать элемент по нулевому ключу, само собой вернется false. по факту, никак не проверить, удалилось GC'м значение из WeakMap'а или нет

  • @Massagistlife
    @Massagistlife 3 года назад

    Снова Владилен спас. Спасибо) Я уже третие сутки не могу понять что такое new map().delete и тут снова нашел ответы.) Спасибо)))))

  • @inzoddex8312
    @inzoddex8312 3 года назад

    есть ли разница между преобразованием в массив через спред и через array.from ?

  • @whicencer8819
    @whicencer8819 3 года назад

    6:08 установить nodemon, запускаешь скрипт через nodemon. И вуаля - скрипт срабатывает сразу после сохранения

  • @friendly334
    @friendly334 2 года назад

    Может кто-то знает, почему WeakMap все еще не очищен, даже если объект, который был передан в виде ключа был изменен на null? Возможно, в консоли браузера по другому работает GB?

  • @Oleksandr_Kuzmychov
    @Oleksandr_Kuzmychov 4 года назад

    А ничего что после того, как ты объект обнуляешь, обращение к нему вернёт null. Т.е. ты потом делаешь cache.has(null), cache.get(null). Если заменить в примере WeakMap на Map, то вывод не поменяется.

    • @Oleksandr_Kuzmychov
      @Oleksandr_Kuzmychov 4 года назад

      И с WeakSet тоже лажа: после users.splice(1, 1) у тебя в массиве по индексу 1 будет уже не { name: 'Alex' }, а { name: 'Irina' }, которую ты в visits не добавлял

  • @user-fx8rm4kw2y
    @user-fx8rm4kw2y 4 года назад

    одно время пытались добавить метод Object.observe. но почему-то от него отказались. хотелось бы рассмртреть данную тему. на примере библиотек или полифилов

    • @djebati2194
      @djebati2194 4 года назад

      На канале есть пару уроков по rxjs.

    • @user-fx8rm4kw2y
      @user-fx8rm4kw2y 4 года назад

      @@djebati2194 я наверное раз десять пересмотрел, хотел вычленить свою тему, это немного другое.

  • @ZhanatBurabaev
    @ZhanatBurabaev 4 года назад

    cache.has(lena) === cache.has(null) && console.log('Нет ключа null')

  • @zicoua
    @zicoua 4 года назад

    Подскажите, пожалуйста, насколько адекватно юзать эти классы с точки зрения производительности? Все просто и удобно, но писать объект в ключ, потом искать по нему... на мой скромный взгляд довольно ресурсозатратно. Есть ли смысл стараться не злоупотреблять таким сахаром?

    • @VladilenMinin
      @VladilenMinin  4 года назад +1

      На большие объемы данных возможно и нет. Но для локальных ситуаций - вполне

    • @zicoua
      @zicoua 4 года назад

      @@VladilenMinin Понятно, спасибо )

    • @Dimonina
      @Dimonina 4 года назад

      по идее в ключ попадает не копия объекта, а ссылка на оный, поэтому достаточно производительно должно быть, производительнее чем string мне кажется, но надо тестить

  • @iGotton
    @iGotton 4 года назад

    +

  • @user-vy8qb3ut5w
    @user-vy8qb3ut5w 3 месяца назад

    Не очень понятно объяснение WeakSet & WeakMap, потому что если в тех же кейсах их заменить на Map & Set, то результат будет аналогичный, потому что ты тупа стираешь ссылку на данные объекты, и из-за этого он не может их найти. В консоль вывести тоже не вариант, остается верить на слово что их нет )

  • @saskirakosyan3788
    @saskirakosyan3788 4 года назад

    Nomer 1 master

  • @zerocool6951
    @zerocool6951 4 года назад +1

    Не очень понятно зачем нужен map для того чтобы найти время когда последний раз заходил пользователь, разве нельзя это сделать просто как свойство обьекта? В чем тут собственно разница?

    • @Dimonina
      @Dimonina 4 года назад +1

      например есть задачи, когда мы не можем менять исходный объект. Первое что приходит на ум, если потом эти данные уходят на сервер в JSON и там жестко проверяются на состав полей. тогда добавление поля в объект приведет к ошибке валидации.

  • @serhiikhotsyk869
    @serhiikhotsyk869 Год назад

    Много неточностей в этом видео, как повторение материала сойдет. На том же джаваскриптРу все лучше и детальней описано.

  • @user-sw1hs4zc5u
    @user-sw1hs4zc5u 4 года назад

    Всем привет, есть проблемка при вызове метода Object.fromEntries(entries)... при вызове через консоль выдаёт ошибку TypeError: Object.fromEntries is not a function. Однако если пользоваться через браузер, то всё отлично отрабатывает. У кого-нибудь была такая проблема и кто как её решил?