18 способов сократить JavaScript код

Поділитися
Вставка
  • Опубліковано 31 гру 2024

КОМЕНТАРІ • 134

  • @VladilenMinin
    @VladilenMinin  2 роки тому +1

    Исходники тут: t.me/js_by_vladilen/37
    Получить профессию Frontend разработчика -
    bit.ly/3bz5oZf

  • @ДмитрийБельский-ъ1д
    @ДмитрийБельский-ъ1д 4 роки тому +29

    0:00 Платформа node.js
    0:52 01 - Условный (тернарный) оператор x ? y : z
    2:54 02 - Проверка переменной на undefined, null и пустую строку
    5:50 03 - Объявление переменных
    6:25 04 - Проверка на true и false
    7:25 05 - Циклы for of и for in, метод forEach
    11:18 06 - Значение переменной по условию
    12:24 07 - Экспоненциальная запись числа 10e6
    13:37 08 - Короткие свойства объектов {a,b}
    14:23 09 - Стрелочные функции ()=>{}
    16:10 10 - Параметры функции по умолчанию
    17:50 11 - Шаблонные литералы `${}`
    19:30 12 - Деструктуризация объекта
    20:45 13 - Оператор «spread» ...
    24:05 14 - Двойная тильда (двойное побитовое НЕ) ~~
    25:05 15 - Возведение в степень **
    26:15 16 - Альтернатива для ParseInt
    27:44 17 - Побитовое НЕ ~ и includes
    29:14 18 - Object.entries, Object.values и Object.keys

  • @SlavaCh
    @SlavaCh 5 років тому +36

    24:12 14 пример Math.floor округляет в меньшую сторону, тогда как ~~ отбрасывает дробную часть. Math.floor(-9.6) !== ~~(-9.6)

    • @MsAkellla
      @MsAkellla 4 роки тому

      Результат один и тот жн

    • @dmitrygorbatikov
      @dmitrygorbatikov 4 роки тому

      @@MsAkellla нет, false выдаёт

    • @alekseykolevatov9381
      @alekseykolevatov9381 4 роки тому

      Даже больше. побитовый двойной НЕ(~~) ещё и быстрее чем флур

  • @Polite_person_
    @Polite_person_ 5 років тому +65

    18 способов сократить JS код = пишите в ES6 =)

  • @nicolaair8766
    @nicolaair8766 4 роки тому +25

    Хотел бы еще добавить:
    1. !!var - Double Bang
    2. ?? - Null Coalesce
    3. ?. - Optional Chaining (имба)
    4. |> - Pipeline
    5. var && 'text'

    • @404Negative
      @404Negative 6 місяців тому

      4 пайплайн это ты сам придумал ?

  • @id89120709012
    @id89120709012 5 років тому +6

    В 4 пункте не соглашусь, if (isSame === true) не то же самое, что и if (isSame). В первом случае true будет, если isSame типа boolean и его значение равно true. Во втором случае тип не проверяется, и true будет даже, если isSame будет, например число 5 или строка 'dd22'.
    Да, понятно, тот кто в теме - он понимает это все, но кто только начинает учить - может не правильно усвоить.

  • @hewston2733
    @hewston2733 4 роки тому +1

    Пример 10:
    Параметры по умолчанию лучше ставить начиная с последнего. Данный код хоть и будет работать, но непривычно, параметр b при отсутствии третьего аргумента при вызове всегда будет underfind

  • @S1IverSurfer
    @S1IverSurfer 5 років тому +27

    Пожалуйста, не делайте как в 14 примере с Math.floor -> ~~
    Если в остальных примерах, по большей части, сокращения оправданы и очевидны, то в данном случае, вы просто перекладываете сэкономленное на паре символов время на другого разработчика, которому придется это гуглить... Лучше оставить такие трюки минификаторам, хотя и полезно знать, на случай если кому то до вас все таки захочется извратиться))
    Для преобразования типов в строки, числа и булевы значения, как по мне, тоже лучше использовать явные конструкции вроде Number('1') вместо +'1', String(2) вместо ''+2, Boolean(3) вместо !!3. Вы скажете, не для того js с динамической типизацией, чтоб я тут в конструкторы вот эти все оборачивал, но поверьте коллега который будет после вас код читать, попомнит вас добрым словом)

    • @Александр-ш6о4к
      @Александр-ш6о4к 5 років тому

      чушь может по 1 еще может быть да и то вряд ли, но +variable и !!variable пишут все, и в заместо 3 +"" что бы перевести в строку можно записать variable.toString()

    • @VladilenMinin
      @VladilenMinin  5 років тому +5

      Если с ~~ еще можно согласиться, то с + точно нет
      Это общеизвестный способ и его можно смело использовать

    • @S1IverSurfer
      @S1IverSurfer 5 років тому +3

      Ребята даже не буду спорить)), это всего лишь мое субъективное мнение, понятно что это вкусовщина, и такие кейсы решаются на уровне линтера. Кстати у eslint'a есть соответствующее правило с названием - 'no-implicit-coercion', как бы намекая что преобразование не явное) eslint.org/docs/2.0.0/rules/no-implicit-coercion
      Но в целом согласен - в этом нет никакой проблемы и многие используют такой способ преобразования типов, главное чтобы вас и вашу команду это устраивало)

    • @CJIu3eHb
      @CJIu3eHb 5 років тому +4

      Некорректно было предлагать + в качестве замены parseInt. Это такой же скользкий момент, как и с ~~.

    • @aleksandr0472
      @aleksandr0472 5 років тому +4

      Согласен с вами, один из постулатов любого языка - явное лучше чем не явное. На аутсорсе тимлид с говном бы вас смешал, Владилен, думаю, понятно почему.

  • @ResultSchool
    @ResultSchool 2 роки тому +1

    Для тех, кто хочет освоить профессию Frontend разработчика за 7 месяцев -
    bit.ly/3OrdmlZ
    Освоить основы веб-разработки бесплатно. Курс по HTML & CSS - bit.ly/3nlsuFo

  • @alllligator
    @alllligator 2 роки тому

    Это потрясающе! Спасибо от души

  • @АлександрАкулич-ю5з
    @АлександрАкулич-ю5з 5 років тому +2

    В примере 9 triple не эквивалентны, первый это declaration, второй - expression.

  • @AlbertMaximov
    @AlbertMaximov 4 роки тому +7

    #10 аргументы с параметрами по умолчанию должны быть в конце

  • @davidbaghdasaryan2486
    @davidbaghdasaryan2486 5 років тому +2

    Очень круто спасибо Владилен .
    Все видео на высшем уровне
    Можно видео про оптимизаций Angular, подробнее об сервисах , и obseravle , я уже завершил курс в Udemy

    • @РоманСергиенко-н5в
      @РоманСергиенко-н5в 5 років тому +1

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

    • @VladilenMinin
      @VladilenMinin  5 років тому +1

      Про Observable целый плейлист на канале

  • @JohanLiebert2003
    @JohanLiebert2003 2 роки тому +1

    15 - Питонисты поймут сразу)))

  • @pavelharelyshau6106
    @pavelharelyshau6106 Рік тому

    чем второй пример отличается от шестого?

  • @volydymyr9897
    @volydymyr9897 4 роки тому +1

    Закрепил знания)) Спасибо)

  • @manoilalexandr
    @manoilalexandr 5 років тому +1

    Спасибо за видео :) познавательно, видео смотрятся легко а главное всё понятно

  • @Евгения-о5л9х
    @Евгения-о5л9х 4 роки тому +2

    Ну, если уж setTimeout сокращать, то:
    setTimeout(console.log, 2000, 'After 2 seconds')

  • @sergeyplotnikov5031
    @sergeyplotnikov5031 4 роки тому +4

    17й способ огонь! Не знал про него! Спасибо!

  • @alexmarek3004
    @alexmarek3004 5 років тому

    правильнее назвать это видео tips and tricks;
    скажем честно, познавательно было бы посмотреть какое-то практическое применение (использование Parcel , самописная корзина для добавления товаров, ) .

  • @АртёмЧугайнов-ш9е
    @АртёмЧугайнов-ш9е 5 років тому +2

    Владилен, создай пожалуйста плейлист "nuxt.js" , а именно подробно о поле script, и использование библиотеки Gsap + nuxt.js. Буду всячески распространять этот плейлист, среди знакомых и друзей. Если есть надежда на создания этого плейлиста, то ответь на мой комментарий или просто поставь лайк:)

    • @VladilenMinin
      @VladilenMinin  5 років тому +1

      Артем, делать я такое не буду, так как у меня есть целый курс по Nuxt где про все рассказывал
      Тема довольно узконаправленная, у меня другой план
      webformyself.com/nuxt/

    • @grantorino3465
      @grantorino3465 5 років тому

      твою работу за тебя не сделать?

  • @Давид-п8и
    @Давид-п8и 5 років тому

    Классный урок! Спасибо вам! 👍😊😊

  • @vit0n
    @vit0n 5 років тому +1

    На строках 33, 34, 35. я с вами не соглашусь что проверка на true в 34 и 35 строке одинаковая. в 34 строке строгое сравнение на конкретно boolean, и конкретно true. а условие на 35й строке выполниться во всех случаях если isSame не null, undefined, false. т.е когда isSame = new Boolean(false) или пустой объект, любая строка, число и тд...

  • @АлександрЗубрилин-ж1ю

    Спасибо за уроки. По Next js, ssr для react - курс не планируется?

    • @VladilenMinin
      @VladilenMinin  5 років тому +1

      В планах есть, но когда - не знаю

    • @АлександрЗубрилин-ж1ю
      @АлександрЗубрилин-ж1ю 5 років тому

      @@VladilenMinin Спасибо за ответ! Очень хорошие уроки у тебя. Лучшее что нашел на ютуб по js и react.

  • @oleksiikobziev9842
    @oleksiikobziev9842 4 роки тому

    Автор спасибо за ролик!
    Пример 1
    Можно ещё красивее сложить
    const num = 42;
    const result = `${num > 20 ? 'More' : 'Less'} than 20`;
    Пример 5
    Можно ещё красивее сложить
    const names = ['Igor', 'Elena', 'Olga'];
    names.map((name, index) => console.log(`names[${index}] = ${name}`));
    Или инлайном
    ['Igor', 'Elena', 'Olga'].map((name, index) => console.log(`names[${index}] = ${name}`));

  • @ПётрПетров-д2ч4х
    @ПётрПетров-д2ч4х 5 років тому

    Ну Владилен, ну малорик)) Владилен, очень хотелось бы видео-урок chrome debag ninja, какие-нибудь козырные приёмы отладки в браузере и в NodeJS.

    • @VladilenMinin
      @VladilenMinin  5 років тому

      Есть такое видео на канале

  • @redcrown5789
    @redcrown5789 4 роки тому

    Обалденно, спасибо!!

  • @ДенисФурман-б3ъ
    @ДенисФурман-б3ъ 5 років тому

    Очень круто спасибо Владилен

  • @netrunner0714
    @netrunner0714 3 роки тому

    Отличное видео, спасибо

  • @ИльяИваник-ф8ф
    @ИльяИваник-ф8ф 4 роки тому

    10e6 - равнозначно 10**6?

  • @bruksbond1
    @bruksbond1 5 років тому

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

  • @ШамильАлисултанов-т6э

    16 из 18 способов знал :-) узнал новое, спс

  • @uaplatformacomua
    @uaplatformacomua 4 роки тому

    Круто! Спасибо 🍀

  • @Незатащил-ц8п
    @Незатащил-ц8п 3 роки тому

    Почему не работает код true $$ value = 2?

  • @andreyopanasenko8771
    @andreyopanasenko8771 5 років тому

    Отличное видео! Будет ли выпуск на тему ssr?

    • @VladilenMinin
      @VladilenMinin  5 років тому +2

      Есть целый курс по Nuxt

  • @svcomplex1
    @svcomplex1 5 років тому

    А точка с запятой не нужна в конце строк? Анахронизм?

    • @grantorino3465
      @grantorino3465 5 років тому

      в ES6+ не нужна

    • @svcomplex1
      @svcomplex1 5 років тому

      @@grantorino3465 ну интерпретатор-то и в es2005 без неё ест.

    • @grantorino3465
      @grantorino3465 5 років тому

      @@svcomplex1 сейчас при использовании ес6 вроде это считается антипаттерном. Во всяком случае дефолтный линтер во Vue ругается на нее

  • @vazgenaleksanyan2929
    @vazgenaleksanyan2929 5 років тому +1

    кто знает что за плагин или что там помагает показывать все эти подскази? например - callbackfn: function(){}

    • @grantorino3465
      @grantorino3465 5 років тому +2

      это не плагин, а включенная спец опция в шторме

  • @Eneguebar
    @Eneguebar 4 роки тому +5

    Второй пример
    (variable !== null && variable !== undefined && variable !== '') и (variable) не одно и тоже при значении variable = 0 в консоли будут выводиться разные значения!

  • @fpv-travel
    @fpv-travel 5 років тому

    Привет, Владилен!. Было бы замечательно записать урок по архитектуре (pure js)

  • @Александр-ш6о4к
    @Александр-ш6о4к 5 років тому

    еще есть прикольная запись типа const foo =(arg)=> arg["car"] || console.log(arg); думаю понятно что она делает, что бы не отворачивать и не писать return в => и вывести console

  • @nicus1504
    @nicus1504 5 років тому

    #10 какой смысл ставить параметры по умолчанию с лево на право? Логичнее начинать с последнегою

  • @VladilenMinin
    @VladilenMinin  5 років тому +2

    Сколько из них вы знали?)

    • @Cobr3nn
      @Cobr3nn 5 років тому +2

      Еще мне нравится вариант замены
      if(true) {console.log(1)} else {console.log(2)}
      на
      true && console.log(1) || console.log(2)
      ну если не надо писать конструкции на несколько строчек, очень упрощает код не правда?, можешь добавить в видосик )

    • @inikonelectrix2349
      @inikonelectrix2349 5 років тому

      Все знал. Кстати они не все полностью эквивалентны.

    • @krava6733
      @krava6733 5 років тому

      Тильда-оператор разве что не знаком был, а так все известно. Стоило бы упомянуть optional chaining оператор. он, конечно, еще не включен в стандарт, насколько помню 3 lvl, но с бабелем вполне можно использовать.

    • @krava6733
      @krava6733 5 років тому +1

      вообще спред/рест/деструктуризация - самые приятные фичи. + спред операторы с объектами можно было бы еще привести пример, не для всех может очевидно (когда нужно подмешать св-ва одного объекта в другой). так же есть много интересных кейсов спред/рест в использовании с аргументами функций.

    • @s2drd864
      @s2drd864 5 років тому

      Практически о всех знал, кроме ~~ и ~. Но видео отличное, его хорошо использовать в качестве заметки (напоминалки) -)

  • @404piano
    @404piano 3 роки тому

    какое я замечательное видео нашел

  • @vitiok78
    @vitiok78 5 років тому

    Толково. Узнал новые вещи

  • @chkpg4317
    @chkpg4317 5 років тому

    Почему точки с запятыми не ставишь?

    • @VladilenMinin
      @VladilenMinin  5 років тому +1

      Код чище

    • @AHTOH_IO
      @AHTOH_IO 4 роки тому

      выскажусь в пользу Владилена: на вкус и цввет все фломастеры разные. Стоит ставить ; там где это позволит БОЛЕЕ ЯВНО определить конец команды. Иначе - нафиг оно надо. Код без ; реально чище.

  • @ReAgent003
    @ReAgent003 3 роки тому +1

    13:20 ошибся. Должно быть не 6, а 7.

  • @ScaleChannel
    @ScaleChannel 5 років тому +3

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

    • @NVsquare
      @NVsquare 5 років тому

      Это не имеет смысла в ноде. Точка с запятой нужна только в одном случае - перед iife

    • @Александр-ш6о4к
      @Александр-ш6о4к 5 років тому

      вы забываете что это примеры, на продакшене так не пишут

    • @VladilenMinin
      @VladilenMinin  5 років тому

      Код чище, в точке с запятой нет смысла

    • @VladilenMinin
      @VladilenMinin  5 років тому

      @@Александр-ш6о4к На продакшене так пишут. Зависит от выбранного стайлгайда

    • @radislaw
      @radislaw 5 років тому

      Точку с запятой уже давно не ставят. И Вам советую

  • @iGotton
    @iGotton 5 років тому

    Супер. 2 вещи новые увидел.

  • @kirillgavrilov9681
    @kirillgavrilov9681 4 роки тому +1

    Еще из твоих роликов узнал, что void 0 === undefined. Но не думаю, что стоит так писать, об этом сокращении вебпак позаботится :)

    • @VladilenMinin
      @VladilenMinin  4 роки тому +2

      Если где-то встретишь, что не будет сюрпризом)

  • @Artem-ym4uk
    @Artem-ym4uk 4 роки тому

    Крут! спасибо

  • @kirillvoloshin2065
    @kirillvoloshin2065 4 роки тому

    первый пример: а если равняется 20?)

  • @mkfk52
    @mkfk52 4 роки тому +1

    13:20 1e6

  • @ВасилийКарнеев-р7э
    @ВасилийКарнеев-р7э 5 років тому

    Узнал кое что новое.)

  • @KipaUA
    @KipaUA 5 років тому

    Спасибо!

  • @webmaster4095
    @webmaster4095 4 роки тому

    5:43 - удобно, аналог '??' из c#
    Хорошее видео как и канал, но не путайте новичков, кл.слово const это не переменная, это константа

  • @iksoldragon4374
    @iksoldragon4374 5 років тому +8

    А потом тебе говорят: "Мы должны поддерживать Internet Explorer")

    • @VladilenMinin
      @VladilenMinin  5 років тому +3

      babel в помощь)

    • @vazgenaleksanyan2929
      @vazgenaleksanyan2929 5 років тому

      @@VladilenMinin а babel не всегда прокатет, потому что бекенд еще будет работать в js коде. и чаще всего это так, к сожелению конечно. Но тебе Большое спасибо за видео

    • @grantorino3465
      @grantorino3465 5 років тому +3

      @@vazgenaleksanyan2929 и каким боком js бек к интернет експлорер?

  • @ФедяМинов
    @ФедяМинов 5 років тому

    Вау. Так люблю короткую кодировку, что для меня длинный рабочий код стал априори - неверным. И всегда ищу способы сократить

  • @АндрейУтин-э1к
    @АндрейУтин-э1к 5 років тому

    почему STORM не ругается на отсутствие " ; "

  • @maksymantoshkin2896
    @maksymantoshkin2896 5 років тому +1

    2 и 6 одинаковые

  • @HelloGoodbye-f6q
    @HelloGoodbye-f6q 5 років тому

    IsSame =true
    IsSame === true это равно if(isSame) как?

  • @___________S_t_a_s___________
    @___________S_t_a_s___________ 5 років тому

    10 млн, но очень полезно)

  • @sonofthemother
    @sonofthemother 5 років тому

    Лучший

  • @swedesjs762
    @swedesjs762 3 роки тому

    Ты 6 способ продублировал)

  • @alekseysverbeev2934
    @alekseysverbeev2934 5 років тому

    #3 считается bad practice

  • @threestepsforward5843
    @threestepsforward5843 4 роки тому +1

    #thumbup

  • @kookaburru
    @kookaburru 5 років тому +1

    Зачем вообще нужны циклы в 1 миллион? Сомнительная затея.
    Не вижу приемов с замыканием, частичным применением и другой функциональной магией.

    • @VladilenMinin
      @VladilenMinin  5 років тому +1

      Эмулировать асинхронность

  • @anton1evdokimov
    @anton1evdokimov 5 років тому

    Благодарю хороший урок. Только про ~~ не совсем точно. Для отрицательных чисел он будет работать как Math.ceil

  • @kva212
    @kva212 2 роки тому

    Не 10е6 а 1е6

  • @grantorino3465
    @grantorino3465 5 років тому

    не знал 2 пункта

  • @ДимаБочаров-н8ы
    @ДимаБочаров-н8ы 5 років тому +1

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

  • @MsAkellla
    @MsAkellla 4 роки тому

    Вот в таком примере не прокатит
    console.log(parseFloat("12px"))
    console.log(+('12px'))

  • @yuriiyurii6656
    @yuriiyurii6656 5 років тому

    Найс

  • @SanchReload
    @SanchReload 5 років тому

    Рекурсию бы вместо while

  • @chaorytp3029
    @chaorytp3029 4 роки тому

    42.

  • @АлексейБабыкин-ц5е
    @АлексейБабыкин-ц5е 5 років тому

    Никогда не делайте как в 7 примере лучше объявите `const million= 1e6`(или `kk`) и сравнивайте x > 10*milion. Как автор показал короче будет, но также не читабельно.

  • @ДмитрийСергеевич-я6ъ8х

    Почему точки с запятой не ставите? Это плохая практика

  • @IuriiBelov
    @IuriiBelov Рік тому

    Спасибо!