ES6 #12 Символы (Symbols)

Поделиться
HTML-код
  • Опубликовано: 17 сен 2018
  • #YauhenK #webDev #ECMAScript #ES6
    Всех приветствую в курсе «ES6».
    В данном видео-курсе мы с вами рассмотрим все ключевые нововведения в стандарте ECMAScript 2015. Разберём практические примеры, а так же проведём аналогию стандартов ES6 и ES5. В своё время это было самое крупное и революционное обновление стандарта, которое добавило кучу новых возможностей начиная новыми способами объявления переменных и новым типом функций, заканчивая новым типом данных symbol, классами, итераторами и генераторами. Все эти фичи мы подробно изучим.
    ✒ Репозиторий курса:
    ✔ GitHub: github.com/YauhenKavalchuk/es6
    ✒ Используемые ресурсы и инструменты:
    ✔ Atom (Редактор кода): atom.io/
    ✔ Node.js: nodejs.org/en/
    ✔ Browserify/Watchify: github.com/browserify/watchify
    ✔ NPM http-server: www.npmjs.com/package/http-se...
    ✒ Полезные ссылки:
    ✔ Exploring ES6: exploringjs.com/es6/
    ✔ Babel: babeljs.io/docs/en
    ✒ Полезные курсы на канале:
    ✔ JavaScript: • JavaScript
    ✒ Полный список готовых и планируемых курсов:
    ✔ Trello: trello.com/b/R6rD7qq8
    ✒ Автор курса:
    ✔ RUclips: / yauhenkavalchuk
    ✔ Instagram: / yauhenkavalchuk
    ✔ Twitter: / yauhenkavalchuk
    ✔ VK: YauhenKavalchuk
    ✔ LinkedIn: / yauhenkavalchuk
    ✔ GitHub: github.com/YauhenKavalchuk
    ✔ VK (Группа): webdevcom
    ✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...

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

  • @p_levin
    @p_levin 4 года назад +61

    Я так и не понял одного. Для каких конкретных задач они нужны? Сохранение состояния?

    • @YauhenKavalchuk
      @YauhenKavalchuk  4 года назад +28

      Нет. Создание уникальных ключей внутри объектов. Когда объекты действительно большие. Либо используются при создании библиотеки для уникальных имён и не допущения конфликта имён снаружи библиотеки

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

      learn.javascript.ru/symbol

  • @igorlezhnin323
    @igorlezhnin323 4 года назад +14

    Прекрасное объяснение материала. У вас талант!

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

    читала-читала и не совсем понимала, посмотрев видео, стало понятнее)) спасибо

  • @user-rg5wh3fx2q
    @user-rg5wh3fx2q 5 лет назад +1

    Классные уроки, только не забрасывай, жду с нетерпением, async await

    • @YauhenKavalchuk
      @YauhenKavalchuk  5 лет назад +2

      Спасибо! Буду стараться и дальше развивать канал

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

    Спасибо большое за урок! Теперь стало понятно

  • @ivant.7062
    @ivant.7062 Год назад

    Спасибо!!
    Всё чётко и понятно!!!

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

    spasibo kruta abisnil!!!!

  • @Victor-il9gm
    @Victor-il9gm 2 года назад

    Спасибо, познавательно !

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

    спасибо, видео про использование symbol в map или weakmap было бы классно посмотреть)

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

      Мне самому было бы интересно посмотреть на это

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

    вот что я ценю, спасибо

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

    Спасибо! все понял

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

    действительно крутое объяснение js symbol ов. Огромное спасибо! Даг бог вам здоровье!

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

    nice explanation. thnks

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

    Законспектировал большую часть видео, думаю на собеседовании не упаду грязь в лицом после такого исчерпывающего видео про Symbol

  • @serhioramires3166
    @serhioramires3166 29 дней назад

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

  • @user-888azim-97
    @user-888azim-97 Год назад

    спасибо!

  • @foxf614
    @foxf614 5 лет назад

    Очень круто и доступно, спасибо! Но я не очень понял - если в объекте объявлять свойство символом без for - как получить значение такого ключа?

    • @YauhenKavalchuk
      @YauhenKavalchuk  5 лет назад

      Если вы мне назовёте хотя бы один адекватный кейс зачем это может понадобиться, то я расскажу)

    • @foxf614
      @foxf614 5 лет назад +2

      @@YauhenKavalchuk Ну... собственно я не смог придумать где вообще можно использовать символ кроме как в свойствах объекта) Может быть Вы могли бы описать другой вариант их использования, тогда я смогу понять.. Наверное:)

    • @YauhenKavalchuk
      @YauhenKavalchuk  5 лет назад +2

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

    • @foxf614
      @foxf614 5 лет назад +1

      @@YauhenKavalchuk Понял, спасибо!Отлегло:)

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

    Спасибо

  • @user-mq5vp1kv4l
    @user-mq5vp1kv4l 11 месяцев назад

    спасибо!!!!!!!!!!

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

    Зачем создавать символ в объекте без "for" если невозможно получить к нему доступ?

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

    Ну, Евгений, у тебя самый нормальный видос по символу в РУ сегменте молодец. Люди делают замечания, что читаешь, у меня тоже такая проблема была на видосах. Просто там другой подход используется, чтобы научиться говорить естественно - пересказывать.Кстати легко, посмотри метод Станиславского - актёрская игра, чтобы понять суть, что нужно держать в голове. Далее голосом сам себе или воображаемому апоненту в споре доказываешь, предположим что такое символ, раза три, затем из полученного Г материала нарезаешь в Адобе примьере суть, лучшие фрагменты, уверен все пройдёт легко, если воспользуешься этим актерским приёмом.

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

    6:33 Каким образом можно обратиться к полю [Symbol('password')], не делая символ глобальным?

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

      let sym = Symbol('password')
      let person = {
      name: "Jack",
      age: 20,
      [sym]: 'Jack2020'
      }
      console.log(person[sym])

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

      ​@@ghambaryanschannel2088 этот способ очевиден))
      В ролике говорится лишь о том, как "вытащить" значение глобального символа 06:33.
      Пример из ролика:
      let person = {
      name: 'Jack',
      age: 20,
      [Symbol.for('password')]: 'Jack20'
      };
      console.log(person[Symbol.for('password')]);
      А я о другом... Я об объявлении НЕ глобального символа в литерале объекта. И способу обращения к этому свойству) Без занесения его в реестр...
      let person = {
      name: 'Jack',
      age: 20,
      [Symbol('password')]: 'Jack20' //Symbol без for. Символ - НЕ глобальный.
      };
      console.log( ? );

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

    Почему я тогда весь объект не могу построить на символах?

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

    Подскажите, пожалусйта, название трека в начале видео :-)

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

      Ох, уже и не вспомню, что-то из бесплатной медиатеки RUclips

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

    А где symbol.iterator о котором ссылка в итераторах? Или я прозевал чтото ?

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

      Не совсем понял вопрос. Я забыл добавить ссылку, или рассказать тему?

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

      @@YauhenKavalchuk в видео по итераторам ruclips.net/video/HToDur7Gkkw/видео.html
      вы говорите что нужно создать свойство Symbol.iterator
      и ссылаетесь на это видео по Symbol
      но здесь ничего нет по Symbol.iterator.
      Таким образом не понятно , что делает Symbol.iterator и откуда оно взялось в итераторах

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

    Благодарочка)

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

    Какое практическое применение?

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

      При обычной разработке нету. А так, как было озвучено в видео: при создании библиотек для добавления уникальных имён. Лично я ни разу не применял символы

    • @alexb.2616
      @alexb.2616 29 дней назад

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

  • @davtian1674
    @davtian1674 5 лет назад +3

    console.log(person) >>> Object {name: "Jack", age: 20, Symbol(password): "Jack20"}
    вот так можно получит сивол

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

    за 2,5 года работы ни разу не понадобился данный тип

    • @YauhenKavalchuk
      @YauhenKavalchuk  10 месяцев назад +1

      За 7 лет работы так и не пригодился)

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

    Дикция неплохая, но... Ключевые правила и идеи каждого каста лучше дополнительно выводить текстом в виде каких-то правил/тезисов на экран, как это делают многие другие блогеры.
    И разные анимашек можно бы добавить хоть немного.

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

      Это один из первых курсов, который появился на канале года 2 назад. На тот момент скилл монтажа не так был развит. Теперь всё намного нагляднее

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

    👍

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

      👍

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

      @@YauhenKavalchuk як я зрозумів, що створений через for символ є глобальним, наприклад Symbol.for(‘mySymbol’) , і з ним можна взаємодіяти в будь- якій частині коду, проте , як тоді з проблемою повторенням імен властивостей, коли ми знову ім‘я властивості вкажем, як Symbol.for(‘mySymbol’) то перезапишемо раніше створену? В чому різниця з тим, коли я два рази ключ вкажу однаковий без використання Symbol?А коли без for, то ніяк з властивістью/методом не зможу взаємодіяти?

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

    Почему символ задается через квадратные скобки?

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

      Это динамическое значение ключа объекта, или как-то так. Суть в том, что в качестве названия ключа можешь передать переменную, значение которой и будет ключем.
      const keyName = 'age'; const person = {name: 'Vasya', [keyName]: 20};
      Лучше объясняется в видео на этом канале, называется "ES6 #7 Объекты (Object)".

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

      @@user-yn9cu7bj7s Спасибо!

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

      Да, Глеб всё верно сказал)

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

      @@user-yn9cu7bj7s, завернул. Пока тоже не вижу оправдания, только если чтоб выпутаться из дерьмокода в легаси. Так сказать, выход из Матрицы. Тоже наверное библиотечное применение какое-то...

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

    Женя привет, как дела ?

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

    я так и не понял зачем мне символы, зря только потерял время

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

    3:36 что он сказал

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

      «В качестве аргумента мы так же можем отправлять имя для символа»

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

    Зря говорите, что символы придуманы и используются только для создания уникальных ключей. Таким образом вы исключаете не менее важную тему системных символов, например Symbol.iterator, используемый для создания кастомных итераторов.

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

      На момент записи других идей использования символов не пришло в голову

  • @davtian1674
    @davtian1674 5 лет назад

    let person = {
    name: "Jack",
    age: 20,
    [Symbol("password")]: "Jack20",
    }
    console.log(person) // Object {name: "Jack", age: 20, Symbol(password): "Jack20"}

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

    Ну и в чем его смысл?

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

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

  • @Fs-xj2gu
    @Fs-xj2gu 4 года назад +3

    Такое чувство как будто с книжки читаешь
    Своими словами не мог объяснить?

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

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

    • @Fs-xj2gu
      @Fs-xj2gu 4 года назад

      @@YauhenKavalchuk ну зачем тезисна

    • @serhioramires3166
      @serhioramires3166 29 дней назад

      Да он сам не понимает, зазубрил по learning javascript и высоал на ютуб. Mission complied.

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

    шляпа полнейшая, кто вообще юзает это на практике сложно представить

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

    Почему на 6:28 обращаемся person[Symbol.for('password')] , через квадратные скобки к символу , а не через точку ?

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

      А вы пробовали обратиться через точку, получилось?

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

      @@YauhenKavalchuk "Если мы хотим использовать символ при литеральном объявлении объекта {...}, его необходимо заключить в квадратные скобки." Поэтому мы не можем обратиться к символу ч/з точку

    • @grigoryVolchok
      @grigoryVolchok 3 месяца назад

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