Очистите свой код и поднимите зарплату
JavaScript - очень гибкий язык программирования, и вы можете реализовать свои требования разными способами. Но следование нескольким принципам и советам может сделать ваш код более читабельным и эффективным.
1. Напишите код в стиле строго типизированного языка.
JavaScript - это слабо типизированный язык программирования, в котором переменная может синтаксически иметь разные типы значений. Но для повышения производительности компиляции и облегчения чтения вашего кода другим программистам рекомендуется писать код в строго типизированном стиле.
Вы должны указать тип данных при определении переменной
Плохой код:
Переменным в приведенном выше коде не хватает информации о типе, что затрудняет понимание кода другими программистами или оптимизацию интерпретатора JavaScript.
Хороший код :
Не изменяйте произвольно тип переменной
Плохой код:
earning
- это целое число в начале, а затем становится строкой. Если кому-то еще нужно прочитать или изменить этот код, он или она обязательно будут сомневаться в коде и даже написать код с ошибками.
В то же время код JavaScript в таких движках, как V8, преобразуется в байт-код, а затем выполняется, и определяется тип данных в байт-коде. Если мы изменим тип данных переменной в коде JavaScript, компилятору придется выполнить некоторую дополнительную обработку, которая может снизить производительность программы.
Хороший код:
Когда вам нужно преобразовать тип значения, используйте новую переменную.
Тип возвращаемого значения функции должен быть исправлен.
Плохой код:
Эта функция может возвращать целое число или строку. Хотя это соответствует синтаксису JavaScript, для человека, вызывающего функцию, затрудняется выполнение арифметических операций непосредственно с результатом getPrice()
.
Хороший код:
В комментарии к функции мы можем согласиться, что возврат -1
означает, что аргумент недействителен. Это позволяет вызывающему объекту обрабатывать результат функции единообразно.
2. Уменьшите количество ненужных поисков в области видимости.
JavaScript поддерживает вложенные области видимости и цепочку областей видимости, что позволяет нам писать эффективный код. Но неправильное использование этих синтаксисов приводит к путанице в коде.
Не подвергайте свой код глобальной области видимости, если в этом нет необходимости.
Плохой код:
Прежде всего, все переменные в теге сценария находятся в глобальной области видимости, а код в разных тегах сценария может разрабатываться разными программистами, что может вызвать конфликты имен.
Во-вторых, во второй строке кода выше при использовании переменной element
ищите переменную element
в глобальной области видимости, что снижает производительность программы.
Хороший код:
Таким образом, мы используем замыкания, чтобы скрыть переменную element
. Это не загрязняет глобальную область видимости и позволяет быстрее находить переменные в локальной области видимости.
Конечно, если вы уверены, что будете использовать переменную element
в другом месте, вам все равно следует предоставить ее в глобальной области видимости.
Не злоупотребляйте закрытием
JavaScript ищет переменные по цепочке областей видимости. Если переменная не может быть найдена в текущей области, механизм JavaScript просматривает родительскую область текущей области, а затем до уровня глобальной области за уровнем. Таким образом, чем глубже закрытие, тем дольше выполняется поиск переменной.
Плохой код:
Переменная верхнего уровня count
используется внутри функции process
, из-за чего механизму JavaScript требуется больше времени для поиска переменной count
при вызове функции process
.
В то же время, если область видимости вложена на несколько уровней и между process
и count
есть десятки строк кода, легко перепутать переменную count при чтении функции процесса.
Лучше передать count
в качестве параметра process
.
Хороший код:
3. Используйте функции ES6, чтобы упростить код.
ES6 существует уже несколько лет и теперь очень совместим. Мы должны активно использовать ES6, чтобы сделать код более лаконичным и элегантным.
Используйте стрелочные функции вместо обычных функций в качестве функции обратного вызова
Если вам не нужно думать о this
привязке, рекомендуется использовать стрелочные функции вместо обычных функций в качестве обратных вызовов.
Плохой код:
Хороший код:
Использовать класс
Использование традиционного синтаксиса прототипа отделит код конструктора от кода метода прототипа, что сделает невозможным эффективную организацию кода.
Плохой код:
Использование класса делает код намного проще и понятнее, в то время как использование класса также упрощает реализацию унаследованных статических функций-членов.
Хороший код:
Используйте строки шаблона
Строки шаблона заключаются в обратную кавычку (` `
) вместо двойных или одинарных кавычек.
Плохой код:
В строках шаблона мы можем использовать любые символы вместо escape-символов, таких как \n
.
В то же время мы можем напрямую использовать выражение ${}
для вставки переменных вместо разделения строк и использования +
для конкатенации.
Хороший код:
Очевидно, это легче читать.
Использовать параметры по умолчанию
В ES5, если мы хотим присвоить аргументам функции значение по умолчанию, мы могли бы написать что-то вроде этого:
В ES6 мы можем писать более простым и читаемым способом:
Использовать переменные области действия блока
Если мы хотим, чтобы консоль выводила цифры 0, 1, 2,… 10 с интервалом в 100 миллисекунд, по очереди, некоторые люди могут написать такой код:
for(var index = 0; index <= 10; index++){ setTimeout(() => console.log(index), 100) }
К сожалению, приведенный выше код не соответствует требованиям. Поскольку переменные, объявленные var
, находятся в глобальной области, значение index
было изменено на 11 при выполнении функции обратного вызова setTimeout.
Одно из решений в ES5 - использовать замыкания:
for(var index = 0; index <= 10; index++){ (function(archivedIndex){ setTimeout(() => console.log(archivedIndex), 100) })(index) }
Здесь мы сохраняем значение index
через закрытие, так что каждый раз, когда выполняется setTimeout, будет найдено правильное значение index
.
Но приведенное выше письмо очень хлопотно и сложно для понимания. Лучше всего использовать let
для объявления переменной с блочной областью видимости.
for(let index = 0; index <= 10; index++){ setTimeout(() => console.log(index), 100) }
Вам нужно всего лишь изменить три символа, чтобы выполнить требования, которые очень просты, удобны и читабельны.
4. Грамматический стиль
Замените простой if-else тернарным оператором
В общем, синтаксис тернарного оператора следующий:
condition ? expression_1 : expression_2;
condition
- это выражение, которое принимает логическое значение, true
или false
. Если условие равно true
, тернарный оператор возвращает expression_1
, в противном случае он возвращает expression_2
.
Плохой код:
Хороший код:
Избегайте ==
==
имеет много специальных механизмов, слишком частое использование ==
сделает наш код более трудным для понимания. Мы можем преобразовывать типы данных явно, чтобы упростить понимание кода.
Плохой код:
Хороший код: