Самый скользкий механизм в Redux

Поделиться
HTML-код
  • Опубликовано: 29 сен 2024

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

  • @starwalker.odessa
    @starwalker.odessa Год назад +2

    Мне одному не понятно почему шаблонизатор react-js пытается изображать из себя - ...контроллер? ))) Что бы проблемы react`а закончились ...нужно перестать превращать его в контроллер. Имеет смысл написать для него - оболочку (архитектуру), которая бы управляла состояниями и шаблона и в целом делегировала полномочия.

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

    Отлично разжевал!

  • @LevShuroff
    @LevShuroff Год назад +6

    Очень качественный контент, впрочем как всегда на высоте. Благодарю за ценную информацию, ждём нового пушечного контента

  • @trueman8413
    @trueman8413 Год назад +5

    Урааа, новый видос от Синяка

  • @frusen_sol
    @frusen_sol Год назад +2

    Отличительно разжевал!

  • @ultraduck100
    @ultraduck100 Год назад +2

    а если до реселекта не добрались то можно использовать shallowEqual для поверхностного сравнения, который так любезно нам предоставляет react-redux

    • @it-sin9k
      @it-sin9k  Год назад +2

      хороший комментарий)

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

    Спасибо, чрезвычайно полезная информация, много использую редакс! А если селекторы составлять таким образом, что они просто возвращают action.payload, а какие-то изменения производить извне? Так не будет перерендеров?

    • @it-sin9k
      @it-sin9k  Год назад +1

      Спасибо :)
      Если вы никак не работаете над данными внутри селектора, то лишних рендеров не будет

  • @it_doc2319
    @it_doc2319 Год назад +2

    Отличное видео с разбором тонкостей Redux. Я тоже как-то заметил в профилировщике, что без второго аргумента рендеров больше, нежели с подставленным shallowEqual из Ramda или Lodash.

  • @ТомасКудин
    @ТомасКудин Год назад +2

    Отлично разжевал!!! Спасибо большое))

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

    Как жеж хорошо что не надо работать с редаксом больше мне😅

    • @it-sin9k
      @it-sin9k  Год назад

      Что используете?)

  • @АлексейСоловьев-е9о

    Отлично разжевал! Спасибо!

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

    Отлично разжевал! Спасибо!

  • @Tciganskybaron
    @Tciganskybaron 13 дней назад

    Кайфовое видеео спасибо!

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

    Спасибо, даже знаю где у меня в проекте есть такая ошибка!👍

  • @ТарасМаковейчук

    Поздравляю, сперва взяли иммутабельность, а потом героически её победили.

    • @it-sin9k
      @it-sin9k  Год назад

      Опыт показывает, какое решение не бери, все равно будет где то жопа торчать) поэтому такого рода скользкие механизмы вполне себе естественны при любом решении)

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

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

  • @user-helena-mankova
    @user-helena-mankova 4 месяца назад

    отлично разжевал))

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

    Отлично

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

    удивительно, при всем уважении, автор залезает в исходники и действительно глубоко старается разобраться что под капотом react и redux, и вот тут ты ждешь что у автора серьезный подход, но затем автор начинает рассказывать то чего не существует в официальной спецификации о передачах по значению и ссылке..Не знаю как Вас зовут, но интересует честный ответ(я понимаю что хомячки просто млеют от вашего ума и захейтят меня тут,к тому же этот комент вы удалите или не заметите) вопрос- Вам самому как? Вам ,которому важен доскональный подход, неудосужиться залезть в спеку и развенчать мифы!! почему у вас руки не дошли до спеки ecmascript и увидеть что там все передается по ссылке , но никогда по значению? надеюсь на понимание и честный ответ самому себе и возможно работу над ошибками, с той же педантичностью) (еще раз аппеляция к мама.ру, learn.js не подходит, только оф спецификация js)
    ps надеюсь буду услышан

    • @it-sin9k
      @it-sin9k  Год назад

      Добрый день :)
      У вас какой-то негативный опыт общения в комментариях) не думаю, что на вас нападут "блеющие хомячки" или я удалю комментарий) наверное за всю историю канала я удалил 1-2 комментариям, где люди очень грубо обзывались
      По поводу передача по ссылке и по значению. У меня уже был тред на эту тему, достаточно длинный получился) Я размышляю об этом может отдельное видео сделать) Но я вообще не отношусь к этому как к большой проблеме. Нас так учат еще с универов и на работе и в интернете продолжают повторять эту мантру. Идея в том, что так проще людям донести мысль, а задача моих роликов как раз донести некую конкретную идею, а не все нюансы всего
      У меня были и другие интересные обсуждения, например то, что когда достаю значение из объекта по ключу это быстрее, чем перебирать массив через find. А тред растянулся на много сообщений, что вообще то на С под капотом движка тоже циклом ищет значение, поэтому все что я говорю это не правда
      Честно говоря я не знаю исходники движков) и спецификацию не знаю толком) и никогда не говорил, что я в этом разбираюсь) и мне приятно, что вы ждете от меня таких знаний) но их просто нет) если хотите поделиться с подписчиками своим опытом буду очень рад предоставить площадку и ресурсы для создания видео)

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

    Что если сравнивать объекты через Json.stringify, а не shallowEqual?

    • @it-sin9k
      @it-sin9k  Год назад +1

      не думаю, что приведение объекта в строку дешевая операция

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

    Отлично разжевал! Мое почтение

  • @huzimuzi4885
    @huzimuzi4885 Год назад +2

    Только начал разбирать эту проблему , как у тебя выходит видео!) Спасибо, очень круто все рассказал.

    • @it-sin9k
      @it-sin9k  Год назад +3

      Вовремя я!)

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

    Отлично разжевал!

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

    офигенно, я просто всегда юзал reselect и создавал какие то сложные селекторы с помощью функции createSelector(), а оно вон че, но это как промисы, хоть мы и часто пользуемся async await - надо знать как оно работает под капотом, спс!

    • @it-sin9k
      @it-sin9k  Год назад

      Рад быть полезным!

  • @dimitro.cardellini
    @dimitro.cardellini Год назад +1

    та-а-а-к ;)
    По-перше, бездоганна візуалізація -- от би я так міг малювати!
    По-друге, трохи обережно з термінами. Дуже часто терміни "store" та "state" використано один замість іншого. Це не дуже впливає на загальну суть, але на рівні коду різниця ключова. Посилання на "store" ніколи не змінюється, на відміну від посилання на "state", яке в ідеалі змінюється при кожному диспатчі.
    По-третє, власне useSelector та рендери -- це не про Redux, а про React та байдінг редаксу до React (react-redux), то ж тут трохи не зрозуміло в чому саму крихкість редаксу. Але це вже трохи буквоїдство

    • @it-sin9k
      @it-sin9k  Год назад

      Комментарии все абсолютно верные)
      Когда я пишу сценарии к видео, очень сложно варьировать между совсем правильными четкими формулировками и известными всем словами. Вот иногда так и получается)

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

      Согласен на 100%
      Подход с иммутабельностью позволяет экономить на сравнениях состояний, иначе каждый раз приходилось бы делать deepEqual.
      А если используются какие-то преобразования, типа filter, то обязательно нужно делать кэширование, с reselect или useMemo.
      Вообще, мне кажется, большая часть проблем производительности связана не с самими библиотеками, а с тем, на сколько правильно декомпозируются компоненты.

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

    так подробно разбирать джуновскую проблему... ну не знаю, насколько это целесообразно

    • @it-sin9k
      @it-sin9k  Год назад

      сложно сказать какого уровня эта проблема. Но за 8 компаний, где местами были одни синьоры помидоры, я видел такого рода "ломаные" селекторы неоднократно

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

    Блин все круто, но как будто на самом интересно и остановился, хотелось бы услышать про reselect

    • @it-sin9k
      @it-sin9k  Год назад

      Так есть же финальное видео про reselect
      ruclips.net/video/qWzxwzcjttk/видео.html

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

    Было бы круто услышать твое мнение про MobX и его сравнение с Redux

    • @it-sin9k
      @it-sin9k  Год назад

      Да, планируется такой плейлист :)

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

    Отлично разжевал 👍

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

    Просто прекрасно!

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

    Отлично разжевал 😉

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

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

    • @it-sin9k
      @it-sin9k  Год назад

      Это видео не про решение ваших проблем, а скорее про более глубокое понимание инструментов, как они работают :)

  • @ПолончукАлександр

    Отличнооо разжевал =D
    Ждем Реселект)))

    • @it-sin9k
      @it-sin9k  Год назад

      По реселекту все уже опубликовано)

  • @vasiapypochkin3241
    @vasiapypochkin3241 8 месяцев назад

    Спасибо!

  • @669pain
    @669pain Год назад +3

    Получается что по своей сути Hook useSelector работает так же как и HOC connect. При любом изменении стора все подписчики оповещаются, но будет ли перерисован компонент или нет решает функция сравнения состояний

    • @it-sin9k
      @it-sin9k  Год назад

      Абсолютно верно :)

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

      Нет. Connect по дефолту использует shallow сравнение в отличие от сравнения по ссылке в useSelector. Поэтому в каком-то смысле useSelector это шаг назад в вопросе оптимизации ререндеров

    • @it-sin9k
      @it-sin9k  Год назад

      @@kusov4748 ну не совсем так. mapStateToProps всегда возвращал объект, а внутри него уже был cars, currentUser и т.д. Т.е. список машин все равно проверялся по ссылке , а не проверялись машины внутри него. Поэтому идея осталась прежней

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

      @@it-sin9k посмотрите доку redux. Там об этом пишут

    • @it-sin9k
      @it-sin9k  Год назад

      @@kusov4748 никто и не спорит, что там об этом пишут) вот бы все еще доку читали и правильно понимали все моменты)

  • @АнтонСтрока
    @АнтонСтрока Год назад

    Redux toolkit тоже таким страдает ?

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

    Кайф

  • @ИльяБондаренко-т4е

    Эх... а на курсах яндекса по реакту про это не слово (

    • @it-sin9k
      @it-sin9k  Год назад

      Это уже более продвинутый контент все же)

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

    Отлично разжевал 😉

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

    хороший видос, спасибо

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

    Чувак от души, отлично всё разжевал🤣🤣🤣, успехов тебе

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

    Реально отлично, благодарю

  • @Iraes05
    @Iraes05 11 месяцев назад

    Долгое время работал на друх стейт менеджерах, пришлось перейти на редакс... Огромное спасибо, что ты делаешь такие замечательные ролики! Без тебя, моя жизнь была бы в разы сложнее!

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

    Чет даже не знал, что фильтр возвращает новую ссылку массива... эт сколько ж перфоманса упала из-за этого....

  • @r.raskolnickoff1408
    @r.raskolnickoff1408 Год назад

    Спасибо! В очередной раз убедился что нативный js лучше всяких популярных либ и фреймворков :)

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

    это тулкитная "проблема". Если делать через connect, такой шняги нет.

    • @it-sin9k
      @it-sin9k  Год назад

      ну здрасте, конечно есть :)

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

      ​@@it-sin9k немного не так выразился. В коннектах люди обычно вменяемые редьюсеры пишут, согласно старым паттернам. А тулкиты народ юзает как в примерах написано. А там про второй параметр как-то редко пишут. На выходе имеем что имеем.

    • @it-sin9k
      @it-sin9k  Год назад

      @@kronatankristof8804 Как по мне мало что изменилось) кто плохо писал, то так же и пишет, а кто старался тот и по прежнему старается)

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

    Это очень полезная информация, спасибо! Были такие ошибка

  • @denisdikusar9423
    @denisdikusar9423 10 месяцев назад

    Отлично разжевал! )) Спасибо за детали!

  • @-X-Ray-
    @-X-Ray- Год назад

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

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

    Спасибо за информацию. Разжевал отличноооо!!

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

    Опять редакс 😢

    • @it-sin9k
      @it-sin9k  Год назад +1

      Закончим с ним будем дальше рассматривать стейт менеджеры)

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

    Отлично разжевал!!! Спасибо))))

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

    Отлично разжевал! Спасибо!

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

    Хорошо что подобные кейсы на данный момент описаны в документации редакса. Более того, там есть несколько решений данной проблемы в отдельных случаях. И обьясняется как правильно использовать селекторы, а как не стоит

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

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

    • @it-sin9k
      @it-sin9k  Год назад +1

      Мне кажется это часто зависит от моды) Одно время пихали прям все подряд в стор, вспомнить тот же redux-form, который каждый чих в стор складывал. И все работало и большинство людей все устраивало. Потом началась новая мода, класть туда, только то что нужно. При этом на моих нескольких проектах были споры на эту тему между разрабами, кто то хотел как раньше все через Redux, а кто то был уже адэптем класть, только то что нужно :)

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

      @@it-sin9k но там вопрос больше в предсказуемости, чем в производительности.
      Вообще особого смысла в глобальном сторе нету, до того момента, когда приложение живёт само по себе и лишь иногда, по необходимости, общается с сервером.
      Подход в Ангуляр с сервисами и RxJS на много чище и понятнее.

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

      @@it-sin9k хотя, конечно, при SSR, наверное, с глобальным состоянием лучше.
      Другой вопрос, что SSR суют туда, где он не нужен...

  • @АлексейСтепанов-к9о

    Лайк!!! Отлично разжевал!!!

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

    супер!) очень интерактивно и доступно, спасибо!)

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

    Крутое видео! Спасибо большое! мне кажется для большего понимания нужно было отметить что перерендриваться будут только те компоненты со сломанном селектором. Так люди могут подумать что сломанные селекторы будут заставлять перерендриваться абсолютно все компоненты. Или я что-то не так понял))

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

    Спасибо за годный контент

  • @AndreyShevchenko-yd3tg
    @AndreyShevchenko-yd3tg Год назад

    Спасибо. Отлично объяснил

  • @igogs7095
    @igogs7095 Год назад +3

    Тема важная. Вопрос, если передать функцию сравнения типо isEqual из lodash это спасет?

    • @it-sin9k
      @it-sin9k  Год назад +2

      Да, это спасет. Я думаю в текущей ситуации даже функция shallowEqual спасет. Так как в самом массиве ссылки на машины одни и те же. Ну и конечно shallowEqual куда дешевле, чем глубокое сравнение

  • @maks-kander6665
    @maks-kander6665 Год назад

    Очень качественно разжевал все, респект👍

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

    Отлично разжевал)

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

    Спасибо, полезное видео

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

    Благодарю!

  • @andreev.frontend
    @andreev.frontend Год назад

    Действительно отлично разжевал! Спасибо! Только вхожу в react/redux и твои видео очень помогают писать код сразу правильно!

    • @it-sin9k
      @it-sin9k  Год назад

      Рад быть полезным :)

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

    Спасибо за позновательный контент!
    Что думаешь о проблеме tearing в отношении разных библиотек с внешним состоянием, например, mobx?

    • @it-sin9k
      @it-sin9k  Год назад

      честно говоря, я только сейчас гуглил, что такое tearing. Поэтому пока ничего сказать не могу :(

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

    Как всегда круто, спасибо!
    Планируете ли ролики по исследованию производительности приложения,
    например через Profiler (в React Developer Tools) или welldone-software/why-did-you-render ?

    • @it-sin9k
      @it-sin9k  Год назад +1

      Есть мысли такие, не знаю как доберусь, но мысли есть)

  • @starwalker.odessa
    @starwalker.odessa Год назад

    Господа, а вам не кажется что вся эта шляпа от того, что кто-то внедрил моду на функциональное программирование? К примеру если React программу реализовать на классах + FLUX (подписка только на однопоточное событие, которое нас интересуют (предшественник redux)) ...да, приложение становится сложнее, ...но работает куда проще чем вся эта современная петрушка с функциональщиной и redux.

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

      вечный холивар... так и до работы с чистым js/html дойти. будет ли быстрее работать? скорее всего - да. но вот скорость разработки...

    • @starwalker.odessa
      @starwalker.odessa Год назад

      @@_always_21 Я ничего не говорил про чистый js... тут и на не чистом мало кто нормально программирует. Достаточно найти одно нормальное решение и пользоваться им. event dispatcher store + react === good! ...не вижу проблем отписываться от handler`ов в destructor`е... чем городить все эти hoooooooook`и.
      java - вообще не болеет подобными детскими проблемами. Так может лучше писать на java? И переводить его в JavaScript через Web Assemble? ...а не придурошный type script и прочие декорации )

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

    А какая разница плачу я от дохода или работодатель? Результат один и тот же.

    • @it-sin9k
      @it-sin9k  Год назад +1

      Не совсем так. Есть вероятность, что вы прошли бы курсы за какие-то деньги и никуда не устроились, деньги бы просто сгорели. Тут вам дают бесплатно понять, ваше это или нет. После обучения, на какую зарплату бы вы пошли, хз. Кто то на 40к, кто-то на 50к, кто то найдет вообще стажировку бесплатную на 3 месяца. С этой стороны вам помогут устроиться сразу на максимально возможную вилку. Без их помощи маловероятно, что вы бы устроились, сразу на такую зарплату, таким образом они забирают те деньги, которые вы бы и так не получали, а вы по факту не платили за обучение.

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

    у меня на собесах разрабы часто валятся на таких вещах, хотя позиционируют себя как сеньёры помидоры)

    • @it-sin9k
      @it-sin9k  Год назад +3

      Теперь будут лучше подготовлены) я слышал много отзывов, что по моим видосам готовятся к собесам))

    • @starwalker.odessa
      @starwalker.odessa Год назад

      у тебя на собесах - только Ты читаешь с бумажки ))) Удобно ))) Господин Team Leader )))))))))))))))))))))))))) Хотелось бы посмотреть на твой код )

    • @it-sin9k
      @it-sin9k  Год назад

      @@starwalker.odessa я честно говоря даже не знаю, что действительно эффективно спрашивать на собесах) все крайне субъективно)

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

      ​@@starwalker.odessa это скорее тем, кто вместо прочтения доки полностью, читает быстрый старт и считает что хорошо знает библиотеку

    • @starwalker.odessa
      @starwalker.odessa Год назад +1

      @@it-sin9k Я подскажу - гонять разраба (которые не раз горел в танках) по всем темам нет смысла. Я предлагаю программистам - готовиться в рамках заранее составленных тем, которые касаются проекта на который их набирают. Мне, за 15 лет в этом дурдоме, нет смысла запоминать весь этот trash, потому как сообщество каждые 2 года кардинально переодеваются в концепциях. И даже если я прав в том или ином вопросе - составляющие долгостроя от этого не поменяются. Нет смысла ждать заучку который зазубрил manual, мне важно только - сможет ли он достаточно подготовится перед началом проекта, на который его рассматривают.

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

    Выход каждого твоего видео, это как праздник) Спасибо!!!

    • @it-sin9k
      @it-sin9k  Год назад

      Спасибо!)

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

      Перед просмотром одеваешься нарядно?

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

      @@papa_paskualle да)) как догадался?))

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

    Отлично разжевал) но текст призыва к комментарию нужно сделать длиннее, из серии "Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?" Чтобы за счет ленивых жоп продвигался контент алгоритмом - он вроде коммент из двух слов не засчитывает

    • @it-sin9k
      @it-sin9k  Год назад

      Интересный момент) я хз честно говоря как работает алгоритм)

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

      Уточка

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

      @@it-sin9k Я тоже хз, но на тех каналах, где ребята шарят - они просят оставлять комменты длиной не менее 4-5 слов для продвижения

    • @it-sin9k
      @it-sin9k  Год назад

      @@demiurgen13 О как) буду иметь ввиду на будущее) спасибо!)

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

    Хороший ролик, спасибо. Возможно это больше не проблема редакса, а реакта и подхода иммутабельности. Хотя их уже и не разделить 😄

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

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

    • @it-sin9k
      @it-sin9k  Год назад

      Если просветите как это работает, буду очень признателен))

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

      @@it-sin9k в джсе все передается по референсу на референс. это можете прочитать где-нибудь на 2ality и некоторые блоги содержат сообщения разработчика джс брендона эйха. передача объекта и примитивного значения происходит одинаково. существуют данные в памяти или создаются, var a = "abc" - это несколько выражений, где "abc" и "a" являются оба ссылками на данные-объект типа строка в рантайме. когда мы передаем объект, то мы делаем то же самое. передаем ссылку на объект. а его структура - это лишь одно из проперти объекта в представлении рантайма. мы изменяем именно это поле, сама ссылка на объект сохраняется. у примитивных значения другой поведение. когда мы используем какие-либо операторы, например сложение, то мы получаем выражения, которые в сумме возвращают нам новое примитивное значение. остальное только явными примерами я бы показал лично, но вряд ли нам это нужно. почитайте про флаг --allow-natives-syntax, д8, jsvu, %DebugPrint %DebugPrintPtr и станет намного яснее.

    • @it-sin9k
      @it-sin9k  Год назад

      звучит все разумно :)
      Вопрос только в следующем
      var a = 'abc'
      var b = 'abc'
      это 2 разных объекта типа строка, и когда мы сравниваем 2 разных объекта через ===. И это сравнение возвращает true. Как это описать как не сравнение по значению?

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

      @@it-sin9k нет, как раз и а, и б - в этом случае - это ссылки на объект типа строка в памяти. поэтому, когда мв сравниваем а с б, то мы сравниваем 0х04fa37be === 0x04fa37be и получаем тру. просто поведение объектов налл/андефайнд/число/строка и так далее - иное, нежели у обычного объекта. то естт, это такие объекты, которые отдают свое значение, а не структуру.
      То есть, в случае общего выражения var a = "abc" выражение "abc" создает константную строку в хипе. иммутабельную. потом выражение в ответ отдает нам референс на эту строку. она уже есть, правильно? и, если она иммутабельна и константна, то зачем нам копия этой строки? не за чем. поэтому var b = "abc" - он находит уже эту строку в памяти и просто отдает тот же адрес) и связывает его с б. а потом при строгом сравнении сравниваем два одинаковых адреса

    • @it-sin9k
      @it-sin9k  Год назад

      > и, если она иммутабельна и константна, то зачем нам копия этой строки? не за чем. поэтому var b = "abc" - он находит уже эту строку в памяти и просто отдает тот же адрес) и связывает его с б. а потом при строгом сравнении сравниваем два одинаковых адреса
      т.е. идея в том, что при создании одинаковой строки, оно находит, что такая строка уже создана и использует ту же ячейку в памяти? Звучит как достаточно дорогая операция для огромного проекте. А есть подтверждение где то такому поведению?