~/VibeHandbook

Языки

developer.mozilla.org

JavaScript

Что это

JavaScript — это язык веба, единственный, который работает нативно в каждом браузере, а через Node, Deno и Bun ещё и полноценная серверная платформа. Он динамически типизирован, событийно-ориентирован и вездесущ, что делает его самым широко развёрнутым языком программирования в мире.

Сильные стороны

  • Работает везде: браузеры, серверы, edge-функции, даже встраиваемые системы.
  • Никакого шага компиляции; правьте и обновляйте для мгновенной обратной связи.
  • Огромная экосистема npm и громадное сообщество.
  • Первоклассная асинхронность с промисами и async/await.

Компромиссы

  • Нет статических типов — многие ошибки всплывают только во время выполнения.
  • Исторические недостатки: нестрогое равенство (==), привязка this, неявное приведение типов.
  • Легко создать разрастание колбэков или зависимостей без дисциплины.
  • Один и тот же язык на фронтенде и бэкенде может размывать архитектурные границы.

Когда стоит выбрать

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

Подходит для вайб-кодинга

AI-ассистенты свободно владеют JavaScript, но отсутствие типов означает, что сгенерированный код может молча предположить неправильную форму данных. Направляйте AI использовать современный синтаксис (const/let, стрелочные функции, async/await, модули) и строгое равенство и просите добавлять защитные проверки или комментарии JSDoc там, где форма данных важна. Указывайте своё окружение — браузер или Node, ESM или CommonJS, — чтобы импорты были корректными. Поскольку нет компилятора, на который можно опереться, просите небольшой запускаемый пример или тест, чтобы вы могли проверить поведение напрямую.

const fetchTitle = async (url) => {
  const res = await fetch(url);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const html = await res.text();
  return html.match(/<title>(.*?)<\/title>/i)?.[1] ?? "(no title)";
};

fetchTitle("https://example.com").then(console.log);