Алекс Лущенко я Вас люблю, столько всего на канале, смотришь и радуешься, что когда пойдешь на собеседование, они там в шоке будут, хочу все выучить и сразу мидлом устроиться
Это вряд ли) Возможно, мой комент немного запоздавший, но если нужно хорошее знание js, лучше учить по learn.js, там в разы больше инфы, чем на любом русскоязычном канале. Конкретно эта тема там разобрана в главе Дескрипторы свойств.
Как по мне const нужно использовать в любых структурных типах, символах, циклах for..in/for..of, так как это лучше отражает суть происходящего. В циклах у нас каждый раз создаётся новая переменная с новым значением в качестве ключа/свойства. Символы, они у нас так и так неизменяемы по своей сути. Ну, а структурные типы хранят в себе ссылку на объект/массив/функцию.
самое простое объяснение - "Константа НЕ определяет постоянное значение. Константа определяет постоянную ссылку на значение" "It does NOT define a constant value. It defines a constant reference to a value"
Когда мы присваиваем объект переменной, то присваивается ссылка на объект, а не сам объект. Ссылка как раз статична, а объект манипулируемый. Тоже и с функциями.
Как я понял. Для примитивов *const* защищает записанное в неё *значение* от переписывания. Для объектов *const* защищает записанную в неё *ссылку на объект* от переписывания, но не содержимое объекта.
11:20 Поэтому лучше использовать use strict режим, чтобы выбрасывалась ошибка при попытке изменить свойства объекта. А то может уйти немало времени что понять почему не изменяется свойство.
Как пример тем для следующих видео - паттерны, интересные/популярные методы объектов, массивов. И очень рекомендую Вам уделить внимание английскому, у Вас достаточно хорошие видео и с английским языком сможете расширить аудиторию канала и учеников.
6:39 - как-то запутанно получается. Типа const гарантирует неизменность значения "с" как переменной, а свойства и методы можно менять.добавлять. Запутанно...
короче все просто, конст делает неизменной ссылку на обьект. В названии обьекта лежит ссылка на его область в памяти и эту ссылку конст не дает изменить. То есть ты не сможешь переназначить обьект const b на обьект a и тд. А вот сама "память обьекта" постоянной не становится и ты можешь ее ковырять как хочешьж
ну ведь var a = {}; тоже будет работать , разница в том что var можно будет изменить на что угодно , а const в любом случаи останется обьектом и не будет возможно его изменить (кроме содержимого в обьекте), верно ?
Возможно это я, что-то не так понял. Вот Вы сказали неважно через что обьявлена переменная через let or const всеравно Object.freeze() работает одинаково. Но в моих экспериментах это не так. При let d = Object.freeze("d":33) действительно содержимое обьекта не изменено, но мы можем изменить тип данных d=5; и все д теперь число а не обьект. Затем d={}; или даже d={"d":33} и все у нас снова обьект который перестал быть замороженным но обращение к нему идет через туже переменную d. Через const же такого не может быть. Мне кажется это важным.и еще я правильно понял const для обьекта гарантирует не изменость типа данных а Object.freeze его свойств?
нужно пересмотреть видео - я не помню что сказал. Возможно и оговорился - я пишу видео без подготовки и не подсматриваю никуда - все по памяти, иногда ошибаюсь.
Найди книгу Грокаем алгоритмы, там с примерами отличное объяснение есть что стека что рекурсии. А простым языком это вызов функции в контексте этой же функции
@@itgid Спасибо) Хотел добавить, что на let и const не работает механизм "Hoisting ". Что let и const видны исключительно в своем блоке кода (block-scope {...} - e.g. if(...){...} || for(...){...} || while(...){...}) в отличии от var у которой видимость в пределах всей функции (function-scope function(){...}). const - это не константа в нашем привычном понимании, что то неизменное. Объявление через const всего лишь говорит о том, что в этом блоке кода (block-scope) эта переменная не будет переопределена и не более того. Так как если передать переменную объявленную так "const someNumber = 5" в функцию, переменную "someNumber" естественное можно будет переопределить, т.к. это совершенно уже не та переменная. P.S. Почему нужно использовать const, мое личное мнение - В своем коде объявляю все переменные через const, через let только те, которые будут переопределены в этом блоке кода. Это повышает читаемость и понимание для меня и надеюсь для будущего девелопера.
Object.defineProperty(obj, prop, descriptor) - ад , карту которого ты обязан знать. Мне снова не нравится структура видео. почему просто не сказать ,что такое примитив, а потом добавить, что const- относится ,как постоянная только к примитивам.
Вообще-то const гарантирует то, что переменная не будет изменена. Просто в случае примитива переменная равна его значению, а в случае объекта, массива, функции - ссылке на объект. Изменение объекта никак не влияет на то, что данная переменная содержит ссылку на сам объект.
Александр, спасибо Вам!
Как всегда доступно, понятно и полезно :)
Александр, спасибо Вам большое!!!! Вы гениально объясняете!!!!
Спасибо Вам, здорово объясняете
Алекс Лущенко я Вас люблю, столько всего на канале, смотришь и радуешься, что когда пойдешь на собеседование, они там в шоке будут, хочу все выучить и сразу мидлом устроиться
Это вряд ли)
Возможно, мой комент немного запоздавший, но если нужно хорошее знание js, лучше учить по learn.js, там в разы больше инфы, чем на любом русскоязычном канале.
Конкретно эта тема там разобрана в главе Дескрипторы свойств.
Как по мне const нужно использовать в любых структурных типах, символах, циклах for..in/for..of, так как это лучше отражает суть происходящего. В циклах у нас каждый раз создаётся новая переменная с новым значением в качестве ключа/свойства. Символы, они у нас так и так неизменяемы по своей сути. Ну, а структурные типы хранят в себе ссылку на объект/массив/функцию.
как всегда, зачёт!
спасибо!
07:15 /* a
самое простое объяснение - "Константа НЕ определяет постоянное значение. Константа определяет постоянную ссылку на значение"
"It does NOT define a constant value. It defines a constant reference to a value"
Привет всем! Ставим лайки) Автор старается для нас!
Интересное видео, спасибо за информацию!)
Когда мы присваиваем объект переменной, то присваивается ссылка на объект, а не сам объект. Ссылка как раз статична, а объект манипулируемый. Тоже и с функциями.
спасибо! хороший урок
Учитель от бога!
Как я понял.
Для примитивов *const* защищает записанное в неё *значение* от переписывания.
Для объектов *const* защищает записанную в неё *ссылку на объект* от переписывания, но не содержимое объекта.
Видео класс! Еще , кстати, можно использовать метод Object.defineProperty, для предотвращения изменений в объекте каких либо параметров.
отлично!
Очень полезное видео!
Спасибо за видео. (просмотрено 14.11.2019)
спасибо!
11:20
Поэтому лучше использовать use strict режим, чтобы выбрасывалась ошибка при попытке изменить свойства объекта. А то может уйти немало времени что понять почему не изменяется свойство.
Как пример тем для следующих видео - паттерны, интересные/популярные методы объектов, массивов. И очень рекомендую Вам уделить внимание английскому, у Вас достаточно хорошие видео и с английским языком сможете расширить аудиторию канала и учеников.
Спасибо!
6:39 - как-то запутанно получается. Типа const гарантирует неизменность значения "с" как переменной, а свойства и методы можно менять.добавлять. Запутанно...
короче все просто, конст делает неизменной ссылку на обьект. В названии обьекта лежит ссылка на его область в памяти и эту ссылку конст не дает изменить. То есть ты не сможешь переназначить обьект const b на обьект a и тд. А вот сама "память обьекта" постоянной не становится и ты можешь ее ковырять как хочешьж
Супер
Спасибо, круто!
ну ведь var a = {}; тоже будет работать , разница в том что var можно будет изменить на что угодно , а const в любом случаи останется обьектом и не будет возможно его изменить (кроме содержимого в обьекте), верно ?
Возможно это я, что-то не так понял. Вот Вы сказали неважно через что обьявлена переменная через let or const всеравно Object.freeze() работает одинаково. Но в моих экспериментах это не так. При let d = Object.freeze("d":33) действительно содержимое обьекта не изменено, но мы можем изменить тип данных d=5; и все д теперь число а не обьект. Затем d={}; или даже d={"d":33} и все у нас снова обьект который перестал быть замороженным но обращение к нему идет через туже переменную d. Через const же такого не может быть. Мне кажется это важным.и еще я правильно понял const для обьекта гарантирует не изменость типа данных а Object.freeze его свойств?
нужно пересмотреть видео - я не помню что сказал. Возможно и оговорился - я пишу видео без подготовки и не подсматриваю никуда - все по памяти, иногда ошибаюсь.
картинка в начале видео великолепная
отлично
Пожалуйста сделайте маленький сайт и покажите в совокупе как работает на сайте JS
cool! Alexander, vi delaete yroki bistreee chem ja mogy ich ychit' :)
стараюсь, не сплю, не ем :(
Александр, можете объяснить рекурсию. Спасибо.
«Чтобы понять рекурсию, нужно сперва понять рекурсию»
Найди книгу Грокаем алгоритмы, там с примерами отличное объяснение есть что стека что рекурсии. А простым языком это вызов функции в контексте этой же функции
Спасибо за видео. Надеюсь будет видео про "deep freezing of the object".
@Александр Лущенко можно добавить от себя по const ?)
так пишите!
@@itgid Спасибо) Хотел добавить, что на let и const не работает механизм "Hoisting ". Что let и const видны исключительно в своем блоке кода (block-scope {...} - e.g. if(...){...} || for(...){...} || while(...){...}) в отличии от var у которой видимость в пределах всей функции (function-scope function(){...}). const - это не константа в нашем привычном понимании, что то неизменное. Объявление через const всего лишь говорит о том, что в этом блоке кода (block-scope) эта переменная не будет переопределена и не более того. Так как если передать переменную объявленную так "const someNumber = 5" в функцию, переменную "someNumber" естественное можно будет переопределить, т.к. это совершенно уже не та переменная. P.S. Почему нужно использовать const, мое личное мнение - В своем коде объявляю все переменные через const, через let только те, которые будут переопределены в этом блоке кода. Это повышает читаемость и понимание для меня и надеюсь для будущего девелопера.
11:50 Упс, поспешил с комментарием.))
Кто понял const, тот не спешит.
Все классно . Но все таки вы уступаете другим по "расскрутке " своих курсов в отличие от конкурентов
+
Object.defineProperty(obj, prop, descriptor) - ад , карту которого ты обязан знать.
Мне снова не нравится структура видео. почему просто не сказать ,что такое примитив, а потом добавить, что const- относится ,как постоянная только к примитивам.
Вообще-то const гарантирует то, что переменная не будет изменена. Просто в случае примитива переменная равна его значению, а в случае объекта, массива, функции - ссылке на объект. Изменение объекта никак не влияет на то, что данная переменная содержит ссылку на сам объект.