Эта статья представляет собой краткую шпаргалку по основным концепциям JavaScript.
Ответы на частые вопросы на собеседованиях.
- Типы данных в JavaScript
- Основные типы:
- Числовые: 
number - Строковые: 
string - Логические: 
boolean - Пустые: 
nullиundefined 
 - Числовые: 
 - Ссылочные типы:
- Объекты: 
object - Массивы: 
array - Функции: 
function 
 - Объекты: 
 
 - Основные типы:
 - let, var, const
letиconst— это объявления переменных.let— переменная может быть изменена только внутри блока, в котором она объявлена.const— переменная не может быть изменена после объявления.var— устаревший способ объявления переменных.
 - == и ===
==— оператор равенства. Сравнивает значения переменных.===— строгий оператор равенства. Сравнивает значения и типы переменных.
 - setTimeout и setInterval
setTimeout()— функция, которая запускает функцию через заданное количество миллисекунд.setInterval()— функция, которая запускает функцию через заданное количество миллисекунд, и повторяет это действие снова и снова, пока её не остановят.
 - use strict
use strict— модификатор, который включает строгий режим в JavaScript.- В строгом режиме JavaScript более строг к синтаксису и ошибкам.
 
 - Callback
- Callback — это функция, которая вызывается другой функцией.
 
 
Объекты
- Методы объекта:
hasOwnProperty()— проверяет, является ли свойство собственным для объекта.isPrototypeOf()— проверяет, является ли один объект прототипом другого объекта.propertyIsEnumerable()— проверяет, является ли свойство перечисляемым.toLocaleString()— возвращает строковое представление объекта в соответствии с настройками локали.toString()— возвращает строковое представление объекта.
 - Глубокое и неглубокое копирование
- Глубокое копирование — копирование объекта вместе со всеми его свойствами, включая свойства объектов, которые являются свойствами этого объекта.
 - Неглубокое копирование — копирование только значений свойств объекта.
 
 - Удаление значения объекта
delete object.property— удаляет свойствоpropertyиз объектаobject.
 - Деструктуризация
- Деструктуризация — это синтаксический сахар, который позволяет извлекать значения из объектов и массивов.
 - Например, следующий код:
 
 
JavaScript
const obj = {
  name: "John Doe",
  age: 30,
};
const { name, age } = obj;
… эквивалентен следующему коду:
JavaScript
const name = obj.name;
const age = obj.age;
- new Map
new Map()— создает объект типаMap, который представляет собой ассоциативный массив.
 - weakMap
weakMap()— создает объект типаweakMap, который представляет собой ассоциативный массив, в котором ссылки на объекты не являются сильными.
 - this
this— ключевое слово, которое указывает на текущий объект.
 - apply(), call(), bind()
apply()— вызывает функцию, используя переданные аргументы и контекст.call()— вызывает функцию, используя переданные аргументы и контекст.bind()— возвращает новую функцию, которая вызывается с переданными аргументами и контекстом.
 
Массивы
- Методы массивов:
push()— добавляет элемент в конец массива.pop()— удаляет последний элемент из массива.shift()— удаляет первый элемент из массива.unshift()— добавляет элемент в начало массива.slice()— возвращает часть массива.splice()— удаляет часть массива и возвращает её.sort()— сортирует массив.reverse()— переворачивает массив.
 - map, forEach, reduce
map()— возвращает новый массив, каждый элемент которого является результатом применения функции к соответствующему элементу исходного массива.forEach()— вызывает функцию для каждого элемента массива- reduce: 
reduce()применяет функцию к аккумулятору и каждому значению массива (слева направо), чтобы свести его к одному значению. - new Set: 
new Setсоздает новый объект Set, который позволяет хранить уникальные значения любого типа. - WeakSet: 
WeakSet— это коллекция, в которой каждый элемент должен быть объектом, и они могут быть собраны сборщиком мусора, если нет ссылок на них внеWeakSet. 
 
ООП в JavaScript
- ООП — это парадигма программирования, которая позволяет создавать сложные объекты из простых.
 - В JavaScript объекты создаются с помощью ключевого слова 
new. - Классы — это шаблоны, которые используются для создания объектов.
 - Объекты могут иметь свойства и методы.
 - Фабрики — это объекты, которые создают другие объекты.
 - Обертки — это объекты, которые предоставляют дополнительный функционал для других объектов.
 - Экземпляры — это конкретные объекты, созданные на основе класса.
 
Окружение JavaScript разработчика
- Git — это система управления версиями, которая используется для отслеживания изменений в коде.
 - npm — это менеджер пакетов, который используется для установки и управления зависимостями.
 - Webpack — это инструмент, который используется для сборки JavaScript-кода.
 
Синхронность и асинхронность
- Синхронность — это выполнение кода в последовательном порядке.
 - Асинхронность — это выполнение кода в параллельном порядке.
 - Поток — это единица выполнения в JavaScript.
 - Callback — это функция, которая вызывается после завершения асинхронного действия.
 - Promise — это объект, который представляет асинхронное действие.
 - Fetch — это метод, который используется для получения данных из сети.
 
Анимации и Canvas на JS
- Анимация — это изменение состояния объекта во времени.
 - Canvas — это двухмерная область рисования, которая используется для создания графики.
 
Паттерны в JavaScript
- Паттерн — это общий шаблон решения проблемы.
 - В JavaScript существуют различные паттерны, которые можно использовать для решения различных задач.
 - Порождающие паттерны — это паттерны, которые используются для создания объектов.
 - Структурные паттерны — это паттерны, которые используются для изменения структуры данных.
 - Поведенческие паттерны — это паттерны, которые используются для изменения поведения объекта.
 
Структуры данных в JavaScript
- Структура данных — это способ организации данных.
 - В JavaScript существуют различные структуры данных, которые можно использовать для хранения и обработки данных.
 - Очередь — это структура данных, в которой элементы добавляются в конец и удаляются с начала.
 - Список — это структура данных, в которой элементы могут добавляться в любое место.
 - Стек — это структура данных, в которой элементы добавляются и удаляются с конца.
 - Граф — это структура данных, которая состоит из узлов и связей между ними.
 - Дерево — это структура данных, в которой элементы организованы иерархически.
 
Вот более подробные объяснения некоторых из этих тем:
ООП в JavaScript
Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая позволяет создавать сложные объекты из простых. В JavaScript объекты создаются с помощью ключевого слова new. Например:
JavaScript
const person = new Object();
person.name = "John Doe";
person.age = 30;
Этот код создает объект person, у которого есть свойства name и age.
Классы — это шаблоны, которые используются для создания объектов. Классы в JavaScript определяются с помощью ключевого слова class:
JavaScript
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}
const person = new Person("John Doe", 30);
Этот код определяет класс Person, который имеет конструктор, принимающий два аргумента: имя и возраст. Конструктор устанавливает свойства name и age объекта person.
Объекты могут иметь свойства и методы. Свойства — это данные, которые хранятся в объекте. Методы — это функции, которые могут выполняться объектом. Например:
JavaScript
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log("Hello, my name is " + this.name);
  }
}
const person = new Person("John Doe", 30);
person.sayHello(); // Hello, my name is John Doe
Этот код определяет класс Person, который имеет свойство name и метод sayHello(). Метод sayHello() выводит сообщение «Hello, my name is » + name.
Фабрики — это объекты, которые создают другие объекты. Фабрики могут использоваться для создания объектов, которые имеют сложный или повторяющийся процесс создания.
Продвинутый
Promise: Promise представляет собой объект, представляющий окончательное завершение или сбой асинхронной операции.
Разница между стрелочными функциями и обычной функцией: Стрелочные функции не имеют своего собственного this и arguments, и они не могут быть использованы в качестве конструкторов.
Event Loop: Event Loop — это концепция, которая обрабатывает и выполняет задачи из очереди событий, таких как обработчики событий или обратные вызовы.
Рекурсия и главное правило рекурсии: Рекурсия — это когда функция вызывает саму себя. Главное правило рекурсии — это то, что она должна иметь условие выхода, чтобы предотвратить бесконечный цикл.
Замыкание: Замыкание — это функция, которая имеет доступ к своей собственной области видимости, области видимости внешней функции и глобальной области видимости.
Тесты: Тесты используются для проверки корректности кода. Они помогают обнаружить и исправить ошибки, улучшить производительность и упростить рефакторинг.
TDD: TDD, или разработка через тестирование, — это методика разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: сначала разработчик пишет тест, который определяет желаемую улучшение или новую функцию, затем пишет код, который будет проходить этот тест, и затем рефакторит новый код к приемлемым стандартам.
Babel: Babel — это компилятор JavaScript, который преобразует код ECMAScript 2015+ в обратно совместимую версию JavaScript, которую можно запустить в старых и текущих браузерах.
ООП и методы этой парадигмы: ООП, или объектно-ориентированное программирование, — это парадигма программирования, основанная на концепции “объектов”, которые могут содержать данные и код: данные в виде полей (часто известных как атрибуты или свойства), и код, в виде процедур (часто известных как методы).
Функциональное программирование vs ООП: Функциональное программирование и объектно-ориентированное программирование — это две разные парадигмы.
Функциональное программирование сосредоточено на выполнении вычислений с использованием функций и избегании изменяемого состояния и изменяемых данных. ООП, с другой стороны, организует программу вокруг объектов и данных, а не функций и логики.
WebSocket — это технология, которая позволяет устанавливать интерактивное соединение между пользовательским интерфейсом и сервером. Это означает, что обе стороны могут обмениваться данными в реальном времени без необходимости постоянно обновлять страницу или отправлять новые запросы на сервер. Это делает WebSocket идеальным для ситуаций, которые требуют быстрой и постоянной передачи данных, таких как онлайн-игры, чаты и т.д.
Другое
0.1 + 0.2 в JavaScript: Из-за особенностей двоичной арифметики в JavaScript, 0.1 + 0.2 не равно 0.3. Вместо этого, результат будет близким к 0.3, но не точно 0.3.
Операции с разными типами: В JavaScript, когда вы выполняете операции с разными типами данных, JavaScript пытается преобразовать один или оба операнда в тип, который подходит для операции. Например, true + true в JavaScript будет равно 2, потому что true преобразуется в 1 в числовом контексте.
obj[0] + obj[‘0’]: Если obj — это объект, и он имеет свойства, которые соответствуют 0 и '0', то obj[0] + obj['0'] вернет конкатенацию значений этих двух свойств.
requestAnimationFrame: requestAnimationFrame — это метод, который говорит браузеру, что вы хотите выполнить анимацию и просит его вызвать определенную функцию для обновления анимации перед следующей перерисовкой. В аргументе requestAnimationFrame указывается функция для обновления анимации.
