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

Используйте выражения функций вместо объявлений функций

Скорее всего, если вы используете какую-либо библиотеку/фреймворк или компилятор для своего Javascript, «использовать строгое» включено, но на всякий случай не забудьте добавить его в файл и в функции. Это гарантирует, что вы получите ошибки, которые произошли бы молча, если бы не включили его.

Прекратите использовать «вар»!

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

Максимально используйте «const» и неизменяемость.

Объявления с «var» также поднимаются, что делает объявления var доступными до того, как произошло объявление, что является странным, неочевидным поведением.

Предпочитайте чистые функции

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

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

Предпочитайте класс функциям-конструкторам

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

Используйте «деструктурирование»

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

Работайте только с нужными вам данными

Как и в приведенных выше примерах, деструктуризация — это хороший способ извлечь данные, необходимые для выполнения работы, но также сделайте привычкой вызывать методы и функции только с теми вещами, которые им нужны. Это также относится к данным, поступающим из API. Извлекайте и очищайте только те данные, которые вам нужны, прежде чем сохранять или что-либо с ними делать.

Всегда используйте «===»

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

Избегайте глобальных переменных

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

Оберните свободные объявления в блоки

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

Организуйте свои декларации

Будьте последовательны в том, как вы объявляете вещи. Поместите все свои объявления сверху, начиная с констант и заканчивая переменными. Сделайте константы прописными, чтобы указать, что они являются константами, что предотвратит попытки разработчиков изменить их.

Не инициализируйте вещи с помощью «undefined»

Что-то является «неопределенным», когда ему не хватает ценности. Давайте согласимся, что присваивать чему-то «нет значения» как «значение» — довольно странная концепция, верно? Поскольку Javascript уже делает вещи «неопределенными», как вы можете сказать, является ли что-то неопределенным из-за вас или Javascript? Это затрудняет отладку, почему вещи являются «неопределенными», поэтому вместо этого лучше установить для них значение «null».

Всегда инициализируйте свои объявления

По той же причине вы не должны давать «undefined» в качестве значения объявлениям, вы не должны оставлять их без значения, потому что они «undefined» по умолчанию.

Линтуйте свой код и придерживайтесь единообразного стиля

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

Использовать машинопись

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

Функции и методы должны делать только одно

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

Не ленитесь называть вещи

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

Избегайте ненужных деклараций

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

Используйте значения по умолчанию, когда это возможно

Иметь значения по умолчанию более элегантно, чем выдавать ошибки, потому что что-то не было предоставлено. Если вы действительно хотите поймать не предоставленные значения, вы можете проверить мою статью о «25 решениях javascript», где я делюсь способом сделать вещи обязательными, которые выдают ошибку, если значение не указано.

Всегда иметь случай по умолчанию для операторов switch

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

Никогда не используйте «eval»

Никогда! Это не обязательно.

Избегайте «нового» ключевого слова

За исключением создания экземпляров функций класса и конструктора, вы никогда не должны использовать ключевое слово «new» для чего-либо еще. Они могут замедлить работу компиляторов. Javascript настолько странный, что даже отсутствие ключевого слова «новое» иногда работает.

Добавляйте осмысленные комментарии к неочевидным вещам

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

Держите троицы простыми

В худшем случае у вас есть два вложенных тернара. Все, что длиннее, должно быть оператором if или переключателем для удобочитаемости и простоты отладки.

Упростите с помощью дополнительной цепочки

Избавьтесь от этих вложенных проверок и используйте «?» Оператор.

Предпочитайте обещания обратным вызовам

Обещания просты в использовании, и все, что имеет обратный вызов, может быть «обещано». Обратные вызовы являются синхронными, с обещаниями и асинхронными... ожидайте, что вы сможете делать что-то асинхронно, что поможет ускорить ваш код, особенно потому, что Javascript является однопоточным.

Для циклов › .forEach иногда

Не меняйте что-то в массив только для того, чтобы вы могли использовать «.forEach». Вы добавляете дополнительный процесс к медленной альтернативе. Циклы For работают быстрее и позволяют использовать ключевые слова «продолжить» и «разорвать» для управления циклом.

«для…в» и «для…из»

Циклы for-in и for-of — очень мощные способы создания циклов. Цикл for-of позволяет вам просмотреть значения массива, строк, Map, Set и т. д. Нет необходимости что-то менять в массиве, чтобы использовать .forEach. Я бы избегал «for-in» для цикла, так как он самый медленный и перебирает ключи прототипа.

Оптимизация для петель

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

Всегда «попробуй… поймай» методы JSON

Не доверяйте тому, что передается методам JSON .stringify и .parse. Попытайтесь поймать их, чтобы убедиться, что они не сломаются и не сломают ваш код.

Предпочитать строки шаблона

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

Избегайте вложенных или цепных циклов

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

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

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

Предпочитайте «остальное» оператору «аргументам»

Оператор «остальное» будет работать со стрелочными функциями, где «аргументы» недоступны. Придерживайтесь одного способа доступа к аргументам вашей функции.

Предпочитайте globalThis для глобального доступа

Пусть Javascript справится с остальным и убедитесь, что ваш код будет работать независимо от того, находится ли он внутри Web Worker или Backend Node.

Понимать Javascript, но строить с помощью библиотек и фреймворков

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

Всегда ставьте точку с запятой!

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

Читабельно › Производительность, если вам не нужна производительность

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

Будьте осторожны с проверками «Правда» и «Ложь».

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

Предпочитайте троичный код логическому «||» и «&&» проверяет

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

Следите за «undefined» и «null» с «??» оператор

«Оператор нулевого объединения» гарантирует, что нулевые и неопределенные значения не будут выбраны, и он идеально подходит для случаев, когда вы хотите убедиться, что есть значение или откат к значению по умолчанию.

Будьте осторожны с автоматическим преобразованием типов

Вероятно, это еще одна причина попробовать Typescript, поскольку Javascript выполняет автоматическое преобразование типов на лету, что может оказаться не таким, как вы ожидаете. Истинные значения становятся истинными, а ложные значения становятся ложными. Выполнение математических операций между числом и строкой может действительно работать или привести к конкатенации строк. Числа почти всегда превращают ложные значения в ноль, а правдивые — в единицу.

Никогда не доверяйте данным, которые вы не создаете

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

Используйте регулярное выражение при извлечении и поиске вещей в строках

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

«IIFE» и небольшие служебные библиотеки

IIFE — отличный способ выполнить что-то как можно раньше, и вы можете воспользоваться этим, чтобы настроить некоторые вещи до того, как остальная часть кода начнет работать. Вы также можете использовать его для инициализации небольших библиотек с помощью простого API, который позволяет вам инкапсулировать некоторую сложную логику и предоставлять объект, с которым вы можете взаимодействовать, подобно тому, как создается «jQuery».

Не повторяйтесь с утилитами

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

Не пользуйтесь странными «фичами» Javascript

Такие вещи, как обновление «свойства длины массива», использование ключевого слова «with», «void ключевое слово», обновление собственных прототипов объектов, таких как Date, Array, Object и т. д. Другие, такие как передача строки в «setTimeout и setInterval». То, что язык позволяет вам это, не означает, что вы должны это делать.

Добавить модульные тесты

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

«https://ceds.ed.gov/cbn/dus/Manu-v-Burny-Nv-sr000.html»
«https://ceds.ed.gov/cbn/dus/Manu-v- Burny-Nv-sr001.html»
«https://ceds.ed.gov/cbn/dus/Manu-v-Burny-Nv-sr002.html»
«https://ceds. ed.gov/cbn/dus/Manu-v-Burny-Nv-sr003.html»
«https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv-- 04.html»
«https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv--05.html»
«https://ceds.ed .gov/cbn/done/video-Sassuolo-Inter-fobo-tv--06.html»
«https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv --07.html»
«https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--00.html»
«https://ceds .ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--01.html»
«https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo -tv--02.html»
«https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--03.html»
«https:/ /ceds.ed.gov/cbn/des/Bayern-v-im-de-tc04.html»
«https://ceds.ed.gov/cbn/des/Bayern-v-im-de- tc05.html»
«https://ceds.ed.gov/cbn/d es/Bayern-v-im-de-tc06.html»
«https://ceds.ed.gov/cbn/des/Bayern-v-im-de-tc07.html»
« https://ceds.ed.gov/cbn/des/Berlin-v-im-de-tc00.html»
«https://ceds.ed.gov/cbn/des/Berlin-v-im -de-tc01.html»
«https://ceds.ed.gov/cbn/des/Berlin-v-im-de-tc02.html»
«https://ceds.ed .gov/cbn/des/Berlin-v-im-de-tc03.html»
«https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc00.html»
«https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc01.html»
«https://ceds.ed.gov/cbn/des/ BVB-v-im-de-tc02.html»
«https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc03.html»
«https: //ceds.ed.gov/cbn/des/Freiburg-v-im-de-tc00.html»
«https://ceds.ed.gov/cbn/des/Freiburg-v-im-de -tc01.html»
«https://ceds.ed.gov/cbn/des/Freiburg-v-im-de-tc02.html»
«https://ceds.ed.gov /cbn/des/Freiburg-v-im-de-tc03.html»
«https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc00.html»
«https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc01.html»
«https://ceds.ed.gov/cbn/des/Leipzig- v-im-де-tc02.ht мл»
«https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc03.html»
«https://ceds.ed.gov/cbn/ dus/Man-v-Burn-liv-hd-tv-01.html»
«https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-02 .html»
«https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-03.html»
«https://ceds.ed .gov/cbn/dus/Man-v-Burn-liv-hd-tv-04.html»
«https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv- hd-tv-05.html»
«https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-06.html»
«https: //ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-07.html»
«https://ceds.ed.gov/cbn/dus/Man-v -Burn-liv-hd-tv-08.html»
«https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-09.html»
«https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-10.html»
«https://artsmidhudson.org/dlrx/des/ Man-v-Burn-liv-hd-tv-01.html»
«https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-02.html»< br /> «https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-03.html»
«https://artsmidhudson.org/dlrx/des/Man -v-Burn-liv-hd-tv-04.ht мл»
«https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-05.html»
«https://artsmidhudson.org/dlrx/ des/Man-v-Burn-liv-hd-tv-06.html»
«https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-07.html »
«https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-08.html»
«https://artsmidhudson.org/dlrx/des /Man-v-Burn-liv-hd-tv-09.html»
«https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-10.html»
«https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-01.html»
«https://www. kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-02.html»
«https://www.kepler.org/wp-content/pol/des /Man-v-Burn-liv-hd-tv-03.html»
«https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd- tv-04.html»
«https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-05.html»
« https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-06.html»
«https://www.kepler.org/wp -content/pol/des/Man-v-Burn-liv-hd-tv-07.html»
«http s://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-08.html»
«https://www.kepler.org/wp -content/pol/des/Man-v-Burn-liv-hd-tv-09.html»
«https://www.kepler.org/wp-content/pol/des/Man-v- Burn-liv-hd-tv-10.html»
«http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-01.html»< br /> «http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-02.html»
«http://admin.maps.bpex .org.uk/cnn/Man-v-Burn-liv-hd-tv-03.html»
«http://admin.maps.bpex.org.uk/cnn/Man-v-Burn- liv-hd-tv-04.html»
«http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-05.html»
> «http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-06.html»
«http://admin.maps.bpex.org .uk/cnn/Man-v-Burn-liv-hd-tv-07.html»
«http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv- hd-tv-08.html»
«http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-09.html»
« http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-10.html»
«https://ceds.ed.gov/cbn/done / svi-это

50 лучших практик Javascript для написания лучшего кода