Декларации.
2017 год
- Каждый проект должен минимизировать количество глобальных переменных и функций, в идеале только одна или вообще без них. Т.е. если переменная не глобальная, то всегда использовать “var” для ее определения (ESLint). А если функция не глобальная, то она всегда должна быть использована в текущем скрипте.
- Имитирование пространства имен также делать через глобальную переменную. Не расширять напрямую чужие внешние глобальные объекты/пространства имен, использовать для этого только специальные библиотеки. Псевдонимы использовать только для последней части имени в пространстве имен.
- Декларация объекта или массива одной строкой допустима только если она короткая, иначе каждое свойство/элемент должны записываться в отдельной строке.
- Запрещены дополнительные запятые в конце деклараций массивов, объектов (ESLint).
- Запрещено использование наименований переменных и функций, совпадающих с зарезервированными словами JS (ESLint) и глобальных переменных вспомогательных библиотек.
- Следует избегать сложных имен свойств объекта в декларации. Если этотого избежать не удалось, то сложные имена необходимо указывать в кавычках (ESLint).
- Для наименований функций-конструкторов (классов) использовать UpperCamelCase, при их вызове (через “new”) всегда использовать круглые скобки после имени класса. Если после создания объекта сразу следует обращение к его свойствам, то обрамлять всю конструкцию в круглые скобки (ESLint).
- Для констант использовать обычные переменные или свойства объекта-перечисления, при этом для наименований переменных и объекта перечисления использовать прописные буквы через подчеркивание, а для свойств объекта-перечисления UpperCamelCase (ESLint).
- Для переменных, свойств объектов и обычных функций использовать lowerCamelCase (ESLint).
- Следует использовать осмысленные названия переменных за исключением простейших переменных с очевидным применением (например переменная цикла i).
- Для скрытых функций и переменных дописывать в конце знак подчеркивания.
- Запрещено объявление функции внутри блока кода (if/while/else/etc...) за исключением вложенных анонимных функций (ESLint).
- Не передавайте параметры функции напрямую в декларацию вложенной (анонимной) функции, которая будет вызываться в другой момент времени. Использовать для этого либо отдельные локальные переменные, либо выносить декларацию функции в отдельную именованную функцию (ESLint).
- Никогда не используйте аргумент функции arguments, он будет более приоритетным над объектом arguments, который доступен без объявления для каждой функции.
- Запрещено использование массива параметров функции (функции с переменным количеством параметров). Вместо этого рекомендуется использовать параметр-объект.
- Количество параметров функции ограничено 10 (ESLint).
- Запрещено использование объектов-оберток для примитивных типов (ESLint).
- Запрещено ручное использование прототипов.
- Не использовать Array в качестве ассоциативного массива (ESLint).
- Для создания пустого объекта использовать “{}”, вместо “new Object()” (ESLint).
- Для создания массива использовать “[]”, вместо «new Array()» (ESLint).
- Используйте раздельные функции для доступа к значениям объекта, т.е. не использовать функции с различным вариантом возвращения данных (ESLint).
- Запрещено переопределять стандартный метод toString(). Переопределение разрешено только при работе с отладчиком.
- Для имен переменных ссылок на this при передаче во вложенные функции допустимы имена: "that", "self", "_this", "_that", "_self" (ESLint).