Эта статья представляет собой краткую шпаргалку по основным концепциям 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
указывается функция для обновления анимации.