1. Базовый формат

Отступы

Рекомендуется использовать 4 пробела на уровень. Вы можете установить tab = 4 пробела в редакторе для автоматического преобразования.

Точки с запятой

Не опускайте точки с запятой, чтобы предотвратить ошибки ASI (Automatic Semicolon Insertion).

Ширина линии

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

Переносы строк

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

Пустые строки

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

Автор Николас также предлагает оставлять пустую строку в начале блоков управления потоком, но приведённый пример не очень понятен.

Чтобы задать имя ограничения UNIQUE и применить его к нескольким столбцам, можно использовать следующий синтаксис:

  • Имена переменных/имена функций: правило Camel, первое слово начинается со строчной буквы, последующие слова начинаются с заглавной буквы, а остальные — со строчной.
  • Имена констант: в стиле C, все заглавные, слова разделены подчёркиваниями.
  • Конструкторы: правило Pascal, все слова начинаются с заглавных букв, а остальные — со строчных.

Литералы

  • Строки: заключаются в двойные кавычки, для переноса строк используйте оператор [+], не используйте escape-символ \.
  • Числа: не опускайте части до и после десятичной точки и не используйте восьмеричную форму.
  • Null: рассматривайте null только как заполнитель для Object. Не используйте его для проверки параметров и не используйте его для проверки неинициализированных переменных.
  • Undefined: все объекты следует инициализировать значением null, чтобы отличать undefined от неинициализированных.
  • Литералы объектов/литералы массивов: не используйте подход с конструктором для объявления объектов и массивов.

2. Комментарии

P.S. В книге есть очень классическое объяснение:

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

Однострочные комментарии

  • Конец строки: отделяйте от кода одним уровнем отступа, и после // должен быть пробел.
  • На отдельной строке: используется для комментирования кода ниже, и он должен сохранять тот же отступ, что и комментируемый код.
  • Начало строки: используется для комментирования нескольких строк кода.

Многострочные комментарии

Используется для обрамления больших блоков комментариев. Рекомендуется стиль Eclipse, например

/*
 * comment line1
 * comment line2
 */

Примечание:

  • Оставляйте пустую строку над многострочными комментариями.
  • Оставляйте пробел после звёздочки *.
  • Многострочные комментарии должны содержать не менее трёх строк (потому что после первой и последней строк комментарии не добавляются).

Где добавлять комментарии

  • Код, который не может сам себя объяснить
  • Намеренный, но выглядит так, будто содержит ошибки
  • Хаки для конкретных браузеров

Документирующие комментарии

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

/**
 * 添加指定元素到默认数组
 *
 * @method add
 * @param {Number} 将要添加的元素
 * @return {Boolean} 添加成功/失败
 * @throw {TypeError} 参数类型不匹配
 */
function add(item){
    if(typeof item === "number"){
        arr.push(item)
    }
    else{
        throw new TypeError();
    }
}

3. Инструкции и выражения

Выравнивание фигурных скобок

Рекомендуется стиль с фигурной скобкой в конце строки, а не стиль со скобкой на следующей строке.

Пробелы в блочных инструкциях

Перед круглыми скобками после if и после них должен быть пробел, например:

if (expr) {
    code
}

Оператор switch

  • Отступы: case выравнивается по switch, break — с отступом в 1 уровень.
  • Сквозное выполнение case (fall-through): используйте пустую строку или комментарий //falls through, чтобы показать, что сквозное выполнение намеренно.
  • default: сохраняйте default или используйте комментарий //no default, чтобы указать, что default отсутствует.

P.S. Дуглас, автор «JavaScript: The Good Parts», считает, что сквозное выполнение case использовать не следует (называя это «куриными рёбрышками» — чем-то малополезным), а Николас считает, что это нормально, если это объяснено пустой строкой или комментарием.

Инструкция with

Не используйте её.

цикл for

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

Цикл for-in

Не используйте его для перебора массивов. При его использовании не забывайте добавлять фильтр hasOwnProperty. Если вы намеренно перебираете свойства прототипа, объясните это комментарием.

4. Переменные, функции, операторы

Объявления переменных

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

Объявления функций

Объявляйте перед использованием. Никогда не помещайте объявления функций внутрь ветвей if, потому что браузеры понимают их по-разному, а ES не предоставляет стандарта.

Вызовы функций

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

Немедленно вызываемые анонимные функции

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

Строгий режим

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

Проверка равенства

Используйте только === и !==.

eval

Не используйте eval() и new Function(). Используйте анонимные функции для оптимизации setTimeout() и setInterval().

Типы-обёртки примитивов

Не используйте new Boolean(), new String(), new Number().

Ссылки

  • 《Поддерживаемый JavaScript》
  • "JavaScript: хорошие части"

Источник: http://www.codeceo.com/article/javascript-code-style-guide.html