Типи данних в JS
На основі object створюються такі дані (структура даних):
1. Arrray;
2. Set;
3. Map;
4. Date;
5. Function;
6. Promise;
7. RegExp;
8. Math;
9. Generators;
Чим відрізняється тип даних від структури
Основна відмінність полягає в тому, що тип даних вказує на сами дані (наприклад, це число чи рядок), в той час як структура даних вказує на організацію цих даних у вигляді колекції чи контейнера. Тобто, тип даних - це властивість даних, а структура даних - це спосіб, яким ці дані організовані та зберігаються.
Які оператори є в JS
8.Інші оператори:
, (оператор коми для виразів)
delete (видалення властивостей об’єкта)
new (створення нового об’єкта)
void (використовується для повернення undefined)
yield (використовується в генераторах)
Що таке Set()
Set в JavaScript - це вбудований тип даних, який представляє собою колекцію унікальних значень. Set не допускає наявності дублікатів у своїй колекції, тобто він зберігає лише унікальні значення. Це дуже корисний інструмент для роботи з унікальними об’єктами або даними.
// Створюємо новий Set
const mySet = new Set();
// Додаємо значення до Set
mySet.add(1);
// Дублікати автоматично відкидаються
mySet.add(1); // Не спрацює, так як 1 вже є у Set
// Перевірка наявності значення в Set
console.log(mySet.has(1)); // Вертає true
console.log(mySet.has(4)); // Вертає false
// Видаляємо значення з Set
mySet.delete(2);
// Перебір усіх значень у Set
mySet.forEach(value => {
console.log(value);
});
// Отримуємо кількість елементів у Set
console.log(mySet.size); // Вертає 2
// Очищаємо Set
mySet.clear();
Set в JavaScript фактично не має індексів, оскільки це не індексований масив. У Set елементи зберігаються без жодного індексу, і ви взагалі не можете звертатися до них за допомогою індексів, як це робиться у масивах.
Видалення в Set визначається значенням елемента, яке ви хочете видалити. Це відбувається за допомогою методу delete(), який приймає саме значення. Немає жодних індексів для видалення елементів з Set.
Set - це об’єкт, і він успадковує властивості та методи від прототипу Object, як і більшість інших об’єктів в JavaScript. АЛЕ МАЄ ВЛАСНИЙ ПРОТОТИП NEW SET().
Важливо зауважити, що Set не успадковує властивості та методи масивів (Array), оскільки це окрема структура даних.
Map в JS
Map в JavaScript - це структура даних, яка дозволяє зберігати пари ключ-значення і надає можливість швидко виконувати операції додавання, видалення та отримання значень за ключем. Map відрізняється від об’єкта (Object), оскільки в об’єкті ключами можуть бути лише рядки або символи, тоді як Map дозволяє використовувати будь-які значення (включаючи об’єкти, функції, примітиви і так далі) в якості ключів.
Основні особливості Map включають:
В Чому різниця між Map та Object
Map
1. Пустий за замоучуванням;
2. Ключем може бути все що завгодно;
3. Можемо отримати size;
4. Оптимізований для чистих операцій;
5. По замовчуванню не має stringify\ parse;
Object
1. Має prototype ключі;
2. Ключами можуть бути string, Symbol;
3. Ручний трекінг розміру;
4. Не оптимізований для чистих операцій;
5. Є stringify / parse
WeakMap()
WeakMap - це спеціальний тип Map в JavaScript, основною перевагою є швидко зберігати дані які квикористовують як кеш.
Часто використовується для кеша!
Ось ще пару прикладів
WeakSet()
Працює так само як і WeakMaр різниця у вигляді зберігаємих даних.
Принципи ООП
class Circle extends Shape {
constructor(radius) {
super();
this.radius = radius;
}
// Перевизначення методу getArea для обчислення площі кола
getArea() {
return Math.PI * this.radius * this.radius;
}
}
class Square extends Shape {
constructor(side) {
super();
this.side = side;
}
// Перевизначення методу getArea для обчислення площі квадрата
getArea() {
return this.side * this.side;
}
}
// Функція, яка приймає будь-яку фігуру і обчислює її площу
function calculateArea(shape) {
return shape.getArea();
}
// Створення об’єктів різних фігур
const circle = new Circle(5);
const square = new Square(4);
console.log(circle.getArea());
console.log(square.getArea());
В чому різниця методів Абстракції та Інкапсуляції
class Automobile {
constructor(make, model) {
this.make = make;
this.model = model;
let speed = 0;
const setSpeed = (newSpeed) => {
if (newSpeed >= 0) {
speed = newSpeed;
}
};
this.getSpeed = () => {
return speed;
};
this.accelerate = (amount) => {
setSpeed(speed + amount);
console.log(
`Автомобіль ${this.make} ${this.model} рухається зі швидкістю ${speed} км/год.`
);
};
} } В даному коді:Інкапсуляція:
Інкапсульоване поле speed - це поле, оголошене змінною let в конструкторі класу. Воно приховане від зовнішнього коду і не має прямого доступу ззовні.
Інкапсульований метод setSpeed - це функція, оголошена змінною const в конструкторі класу. Вона також прихована від зовнішнього коду і використовується для зміни значення поля speed.
Абстракція:
Абстракція представлена методом accelerate, який визначений як публічний метод класу. Він використовує інкапсульований метод setSpeed для зміни швидкості та виводить інформацію про русі автомобіля. Користувач класу може взаємодіяти з автомобілем через цей публічний метод без необхідності знати, як саме внутрішньо реалізовано логіку зміни швидкості.
Таким чином, цей код поєднує в собі інкапсуляцію для приховання деталей реалізації (поле speed та метод setSpeed) і абстракцію для надання публічного інтерфейсу (метод accelerate), який дозволяє користувачам взаємодіяти з об’єктом класу “Automobile” без знання всіх деталей його реалізації.
Види створення класів
Constructor functions - старий підхід;
const User = function(email, password) {
this.email = email;
this.password = password;
}
const user1 = new User(‘a@a.com, ‘123’);
ES6 Classes
Object.create()
Які прототипи є в JS
Основні:
Додаткові прототипи:
Як працює Хеш-таблиця в JS
Хеш-таблиця - це структура даних, яка дозволяє ефективно зберігати та отримувати значення за ключем. В мові JavaScript хеш-таблиці використовуються, наприклад, для реалізації об’єктів та множини Set. Давайте розглянемо, як працює хеш-таблиця в JavaScript:
Ефективність хеш-таблиці: Якщо хеш-функція добре розроблена та гарантує рівномірний розподіл ключів, пошук, вставка та видалення значень в хеш-таблиці можуть бути виконані за сталий час (O(1)). Проте колізії можуть призвести до гіршої ефективності, тому важливо вибрати хорошу хеш-функцію та метод розв’язання колізій для забезпечення оптимальної продуктивності.
Хеш таблиця у Frontend розробці
Кешування даних: Ви можете використовувати хеш-таблиці для кешування даних, щоб зменшити кількість запитів на сервер та зберегти дані локально. Наприклад, ви можете зберігати вже завантажені зображення, результати запитів або інші дані.
Приклад: Під час завантаження сторінки ви завантажуєте та зберігаєте зображення в об’єкті Set, щоб забезпечити унікальність URL-адреси зображення. При спробі завантаження того самого зображення ви перевіряєте його наявність у Set і завантажуєте лише в разі відсутності.
Приклад: Ви створюєте віджет фільтрації для списку товарів. Всі обрані параметри фільтра зберігаються в об’єкті для збереження стану і використовуються для фільтрації відображуваних товарів.
Приклад: Ви створюєте віджет фільтрації для списку товарів. Всі обрані параметри фільтра зберігаються в об’єкті для збереження стану і використовуються для фільтрації відображуваних товарів.
Приклад: Ви реалізуєте систему подій для вашого користувацького інтерфейсу. Об’єкт EventEmmitter зберігає список підписників на події і визиває їх під час спрацювання подій, які стосуються взаємодії користувача з додатком.
Приклад: Ви розробляєте реактивний компонент для відображення даних користувача. Об’єкт Map використовується для відстеження залежностей між даними та відображенням і оновлення компонента при зміні даних.
Приклад: Ви створюєте графічну бібліотеку, яка обчислює та зберігає інтерпольовані значення для прискорення рендерингу графіки. Значення зберігаються в об’єкті Map, щоб уникнути повторного обчислення
Цикли “for”, “for in”, “for of”
Що таке функція і процедура
Функція завжди має return;
Процедура нічого не повертає;
Робота функцій та пам’яті на прикладі:
function sun(a, b) { return a+ b}
Для цієї функції виділиться місце в пам’яті яке буде виглядати ось так:
sum: –> fn –>
(примає параметри щось робить повертає результат);
потім коли ми визиваєм дану функцію:
const result1 = sum(4, 6);
В цей момент відкривається локальна помять в якої ми маємо дві зміні а=5, b=8. Функція обчислює результат та повертає в глобальну пам’ять значення 13. Після чого вся локальна пам’ять звільняється.
В глобальній пам’яті зберігається змінна result 1: 13
Варіанти запису функції
function sum (a, b) {
return a + b;
}
const sum1 = function(a, b) {
return a + b;
}
(function(a, b) {
return a + b;
}) (5, 3)
const sum2 = (a, b) => {
return a + b;
}
В чому різниця між function Declaration та Function Expression в JS
Ключова відмінність між цими двома способами полягає в часі оголошення та видимості функцій. Function declarations можна викликати в будь-якому місці коду, навіть перед оголошенням, завдяки hoisting, тоді як function expressions повинні бути оголошені перед викликом.
Hoisting в JS та як він працює
це концепція в JavaScript, яка дозволяє оголошувати змінні та функції після їх використання в коді, і при цьому вони все одно будуть валідними.
Як працює інтерпритатор в JavaScript
Функции вищого порядку
Цункця вищого порядку це функція яка приймає іншу функцію або створюють в середині себе функції та повертають їх результат через оператор return
Чим відрізняється імперативний від декларативного підхода
Інперативний код описує “крок за кроком” виконання операцій. Ви визначаєте конкретні інструкції, які комп’ютер має виконувати.
Ви самі керуєте деталями виконання, такими як цикли, умовні переходи і змінні стану.
Цей стиль може бути досить деталізованим та складним у великих програмах.
let numbers = [1, 2, 3, 4, 5];
let squaredNumbers = [];
for (let i = 0; i < numbers.length; i++) {
squaredNumbers.push(numbers[i] * numbers[i]);
}
Декларативний код описує, що має бути зроблено, а не як це має бути зроблено. Ви описуєте бажаний результат, і мова (або бібліотека) сама визначає, як досягти цього результату.
Ви не керуєте деталями виконання, але надаєте програмі або бібліотеці інструкції для оптимального виконання завдання.
Цей стиль часто більш читабельний і менш схильний до помилок.
let numbers = [1, 2, 3, 4, 5];
let squaredNumbers = numbers.map(number => number * number);
Замикання
function hello(name) {
const helloName = () => console.log(‘hello’, name);
return helloName; }
hello(world) - нічого не покаже.
щоб відпрацювала ця функція нам треба цю функція призначити в зміну.
1 - ми запишим в глобальну пам’ять зміну helloWorld яка буде мати функцію helloName та в Skope запише всі параметри а потім все видалить:
helloWorld: helloName –> f –>
{
[[scope]]: {name: ‘world’}
}