Архивный материал. Актуальный структурный раздел: перейти к карте подготовки.
JavaScript
Этот раздел сохранен как архивный справочник.
Для системной подготовки используйте JavaScript и Банк вопросов.
Типы данных:
Примитивные:
String - строка Number - число Boolean - true/false (логический тип) BigInt - большое число Undefined - значение не установлено Null - отсутствие значения Symbol - представляет уникальное значение, которое часто применяется для обращения к свойствам сложных объектов
Ссылочные:
Object - объект
ООП
Основные принципы объектно-ориентированного программирования (ООП) в JavaScript
Классы и объекты: Классы представляют собой шаблоны, описывающие атрибуты (поля) и методы (функции) объектов. Объекты являются конкретными экземплярами классов.
Инкапсуляция: Инкапсуляция это концепция, позволяющая скрыть детали реализации объекта и предоставить доступ только к необходимым свойствам и методам.
Наследование: Наследование позволяет создавать новые классы на основе существующих, наследуя их атрибуты и методы. Это позволяет повторно использовать код и создавать иерархии классов, добавляя новый функционал.
Полиморфизм: Полиморфизм позволяет объектам с одинаковым интерфейсом вести себя по-разному в зависимости от их типа или контекста использования.
Абстракция: Абстракция позволяет скрыть сложность реализации объектов за простым интерфейсом. Это делает код более понятным и удобным для использования.
Эти концепции помогают разработчикам создавать более чистый, модульный и гибкий код, что облегчает его понимание, поддержку и масштабирование.
Классы и функциональное разделение:
Когда речь идет о структурировании кода, часто выделяют два основных подхода: классы и функциональное разделение.
-
Классы:
- Описание: Классы представляют собой основной инструмент объектно-ориентированного программирования (ООП). Они объединяют данные и методы, работающие с этими данными, внутри одной структуры.
- Пример:
class Car {
constructor(make, model) {
this.make = make;
this.model = model;
}
start() {
console.log(`Starting ${this.make} ${this.model}`);
}
}
const myCar = new Car('Toyota', 'Camry');
myCar.start();
- Функциональное разделение:
- Описание: Функциональное разделение означает разделение кода на функции, которые выполняют конкретные задачи. Это структура кода, основанная на функциях, а не на классах. Обычно используется в функциональном программировании, но также может быть применено в JavaScript.
- Пример:
function createCar(make, model) {
return {
make,
model,
start() {
console.log(`Starting ${make} ${model}`);
}
};
}
const myCar = createCar('Toyota', 'Camry');
myCar.start();
Выбор между классами и функциональным разделением зависит от контекста и предпочтений. В JavaScript, который поддерживает и ООП, и функциональный стиль, вы можете использовать оба подхода в зависимости от требований проекта и предпочтений команды разработ чиков.
Рекомендации:
- Используйте классы, если ваш код лучше структурируется вокруг объектов с внутренним состоянием и методами.
- Используйте функциональное разделение, если ваш код ориентирован на функции и выполнение задач, и если вам не нужны особенности объектно-ориентированного программирования.
Оба подхода могут использоваться вместе, и выбор зависит от особенностей проекта и предпочтений разработчиков.
Разница между null и undefined
undefined неожиданное отсутствие значения, а null — умышленное отсутствие значения
-
undefinedуказывает на переменную, которая была объявлена, но не инициализирована, в то время какnullявляется значением, явно указывающим на отсутствие значения. -
undefinedиспользуется для обозначения отсутствия значения по умолчанию, в то время какnullиспользуется для явного указания отсутствия значения.
Примитивы мутабельны?
В JavaScript примитивы (числа, строки, булевы значения, null, undefined) являются неизменяемыми. Это означает, что после создания значения, его нельзя изменить. Любые операции, которые кажутся изменяющими значение, на самом деле создают новое значение и присваивают его переменной.
Что такое +=, &=, |=, =, !!, != ?
-
+=- Оператор комбинированного присваивания сложения. Пример:a += bэквивалентноa = a + b. Он сложит значение переменнойbс текущим значением переменнойaи затем присвоит результат обратно в переменнуюa. -
&=- Оператор комбинированног о присваивания побитового И (AND). Пример:a &= bэквивалентноa = a & b. Он выполняет побитовую операцию И между значением переменнойaи значением переменнойb. Результат будет присвоен обратно в переменнуюa. -
|=- Оператор комбинированного присваивания побитового ИЛИ (OR). Пример:a |= bэквивалентноa = a | b. Он выполняет побитовую операцию ИЛИ между значением переменнойaи значением переменнойb. Результат будет присвоен обратно в переменнуюa. -
=- Оператор присваивания. Пример:a = bприсваивает значение переменнойbпеременнойa. -
!!- Оператор преобразования в булево значение. Пример:!!aпреобразует значениеaв булево значение. Еслиaявляется "truthy" (значение, которое интерпретируется как истина), то!!aвернетtrue, в противном случае вернетfalse. -
!=- Оператор сравнения на неравенство. Пример:a != bпроверяет, не равны ли значения переменныхaиb. Если значения не равны, оператор возвращаетtrue, иначеfalse.
Чем отличается массив от кортежа?
Массивы:
- Массивы это упорядоченная коллекция элементов.
- Элементы массива имеют индексы, начинающиеся с 0, что позволяет легко получать доступ к элементам по их индексу.
- Размер массива может быть изменен во время выполнения программы.
- В массивах можно хранить значения разных типов данных (числа, строки, объекты и т.д.).
- Предоставляет встроенные методы и свойства для работы с массивами, такие как length, push(), pop(), map(), filter() и другие.
Кортежи:
- Кортежи также являются упорядоченной коллекцией элементов, но они фиксированы по размеру и типам данных элементов.
- Элементы кортежа могут иметь значения разных типов данных, но их типы и количество элементов известны при объ явлении кортежа.
- Кортежи обычно используются для группировки связанных элементов в одно значение, где каждый элемент имеет свою семантику и значение.
- Обращение к элементам происходит по индексу, как и в массивах.
- Кортежи более типизированы и обычно используются, когда важен порядок элементов и их типы данных.
Деструктуризация объекта?
Деструктуризация объекта в JavaScript позволяет извлекать отдельные значения из объекта и присваивать их переменным. Это позволяет легко и удобно работать с большими объектами и быстро получать доступ к нужным данным, без необходимости использовать длинные цепочки обращений к свойствам объекта.
const person = {
name: 'John Doe',
age: 30,
address: {
city: 'New York',
country: 'USA'
}
};
Базовая деструктуризация
const { name, age } = person;
Деструктуризация вложенных объектов
const {
address: { city }
} = person;