JavaScript является основным языком программирования, позволяющим манипулировать с DOM страниц сайтов. Это интерпретируемый язык программирования исполняемый в браузере. Изначально JavaScript был назван как Mocha, затем переименован в LiveScript. На синтаксис языка оказали влияние такие языки программирования, как Си и Java. Язык Java стал очень популярным и поэтому LiveScript был очень хитро переименован в JavaScript. Эдакий, рекламный ход, чтобы еще никому в то время неизвестный язык, был на слуху.

Стиль кода JavaScript

JavaScript как и каждый язык программирования имеет множество руководств по стилю кода. Часто рекомендуемое руководство это стиль кода для JavaScript от Google.

Объектно-ориентированное программирование

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

Анонимные функции

Анонимные функции в JavaScript это функции динамически объявляемые во время выполнения, которым не присваиваются имена, как обычным функциям.

Функции как объекты первого класса

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

Слабо типизированный

JavaScript представляет собой язык программирования с динамической и слабой типизацией. Поэтому разработчикам, которые работали до этого с Java или C# и имели дело со строго типизированными переменными, нужно быть осмотрительными при работе с слабо типизированными переменными в JavaScript, чтобы не попасть в некоторые ловушки.

Связывание функций

Функции в JavaScript не привязаны к this. Когда вы хотите использовать связывание функции с this, то на помощь придет функция prototype.bind().

Функции замыкания

Замыкания в JavaScript это функции, ссылающиеся на свободные переменные и запоминающая окружение, в котором она создана.

Паттерны (шаблоны) проектирования

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

Список паттернов проектирования

  • Factory
  • Prototype
  • Mixin
  • Singleton

Создание паттернов проектирования

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Module
  • Proxy
  • Revealing Module

Структурные паттерны проектирования

  • Chain of Responsibility
  • Command
  • Mediator
  • Observer

MV* паттерны

В JavaScript можно применять некоторые реализации классических шаблонов MVC и его вариантов

  • MVC
  • MVP
  • MVVM

Инструменты для тестирования JavaScript

Mocha - многофункциональная среда JavaScript-тестирования, работающая на Node.js и в браузере, что делает асинхронное тестирование простым и интересным . Тесты Mocha запускается серийно, что позволяет гибко и точно сообщать отчеты, а также отображает неотображаемые исключения в правильные тестовые примеры.

QUnit -  это мощная, простая в использовании платформа тестирования модулей JavaScript. Он используется jQuery, jQuery UI и jQuery Mobile и способен тестировать любой общий код JavaScript.

Intern - позволяет писать тесты в JavaScript и TypeScript, используя любой понравившийся стиль (TDD, BDD, что угодно!).

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

Jasmine - это среда для тестирования JavaScript. Он не полагается на браузеры, DOM или любые рамки JavaScript. Таким образом, он подходит для сайтов, проектов Node.js или везде, где может работать JavaScript.

Sinon.JS - позволяет проводить автономные тестовые проверки, заглушки и макеты для JavaScript. Работает с любой модульной системой тестирования.

Jest - это полное и простое решение для тестирования JavaScript.

 

Библиотеки

jQuery - пожалуй, самая известная и используемая библиотека для JavaScript.

ReactJS - библиотека JavaScript для создания пользовательских интерфейсов.

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

Backbone - Backbone.js предоставляет структуру веб-приложениям с богатым API, с использованием интерфейса RESTful JSON.

RequireJS - это загрузчик файлов JavaScript и модулей. Он оптимизирован для использования в браузере, но его можно использовать в других средах JavaScript, таких как Rhino и Node. 

Polymer - библиотека, помогающая создавать пользовательские элементы многократного использования в приложениях.

Dojo Toolkit - модульная библиотека для ускорения разработки JavaScript или AJAX приложений и сайтов.

 

Фреймворки

AngularJS - фреймворк с открытым исходным кодом для разработки одностраничных приложений на основе MVC-шаблона, упрощение тестирования и разработки.

Vue.js - прогрессивный фреймворк для создания пользовательских интерфейсов.

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

Knockout.js - фреймворк для создания каркаса веб-приложений, реализующего Model-View-ViewModel шаблон. 

JavaScriptMVC - это среда с открытым исходным кодом, содержащая лучшие идеи в разработке jQuery. 

 

Шаблонизаторы

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

Jade -  высокопроизводительный механизм для построения динамических шаблонов ваших JavaScript приложений.

Nunjucks - богатый и расширяемый механизм для работы с шаблонами, наследованием блоков, макросами, асинхронным управлением.

Mustache.js - логический шаблонный синтаксис для HTML, расширения тегов в шаблоне, используя значения, представленные в хеше или объекте.

Transparency -минимальный механизм шаблонов для jQuery. Он сопоставляет объекты JSON с элементами DOM с нулевой конфигурацией. 

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

 

Анимация

GSAP - быстрый набор скриптов для создания анимации.

TweenJS - это простая и мощная библиотека JavaScript для анимации элементов HTML5.

Snap.svg - позволяет создавать интерактивную, независимую от разрешения векторную графику, которая отлично смотрится на любом экране размера.

Textillate.js - позволяет использовать удивительную CSS3-анимацию для любого текста

 

Game Dev

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

Whs.js - простой и крутой набор для создания 3D-сцен на основе готовых компонентов с высокой производительностью.

Kiwi.js - веселый и дружелюбный движок Open Source HTML5 Game Engine.