JavaScript Flashcards
- Які типи даних присутні в JavaScript?
Існує 8 типів даних. 7 примітивних та 1 складний тип даних.
Примітивні типи: number, string, boolean, symbol, bigInt, null, undefined.
Складний тип - object. Він використовується для колекцій даних та для оголошення більш складних сутностей. Також він передається за посиланням, а прості типи даних за значенням.
- Що таке NaN?
NaN (not a number) - це значення, що отримується в результаті виконання числової операції над не числовим значенням. Його тип даних number. NaN не дорівнює самому собі.
Перевірку на NaN можна зробити за допомогою Number.isNaN
- Яка різниця між null та undefined?
undefined (невизначений) являє собою значення за замовчуванням:
1 - змінної, яку оголосили без ініціалізації;
2 - функції, яка нічого не повертає явно;
3 - неіснуючої властивості об’єкта. null - це значення «відсутності значення».
Присвоюється змінній явно.
- Чим відрізняється строга і нестрога рівність (=== та ==)?
Строга рівність порівнює значення за типом даних та значенням. Нестроге приводить значення до одного типу, а потім ці значення порівнює.
- Чому результатом порівняння двох схожих об’єктів є false?
Тому що об’єкти - це типи даних, що передаються за посиланням. 2 однакові на вигляд об’єкта мають різні посилання, і тому операція порівняння повертатиме false.
- Як перевірити 2 об’єкти на ідентичність?
1 - використовувати JSON.stringify для приведення об’єктів у рядок та порівняти їх вже як 2 рядки. Такий підхід має обмеження. Якщо в об’єкті будуть методи або symbol - JSON.stringify не зможе конвертувати їх у рядок.
2 - написати або використати з бібліотеки функцію deepEqual, яка буде проходити циклом по ключах двох об’єктів і перевірятиме значення цих ключів. Функція має працювати рекурсивно.
- Як зробити копію об’єкта?
Існує поняття глибокого та поверхневого копіювання. Глибоке - це копіювання об’єкта та всіх його рівнів вкладеності. Поверхневе - це копіювання лише першого рівня вкладеності, а для решти копіюється посилання.
Способи поверхневого копіювання:
1 - використовувати spread оператор (…)
2 - використовувати Object.assign()
Способи глибокого копіювання:
1 - використовувати JSON.stringify - JSON.parse для конвертування об’єкта в рядок і потім назад. Має обмеження щодо копіювання методів та symbols
2 - написати або використати з бібліотеки функцію deepClone яка буде рекурсивно проходитиме за ключами об’єкта та копіюватиме їх у новий об’єкт.
- Чим відрізняються змінні var, let та const?
var - змінну можна ініціалізувати після оголошення, можна змінювати, має функціональну область видимості, має hoisting. Зараз майже не використовують під час написання нового коду.
let - змінну можна ініціалізувати після оголошення, можна змінювати, має блокову область видимості, не має hoisting.
const - змінну обов’язково потрібно ініціалізувати під час оголошення, не можна змінювати, має блокову область видимості, не має hoisting.
- Як дізнатися чи є об’єкт масивом?
Для цього можна використати метод Array.isArray.
- Які перебираючі методи масивів ви знаєте?
Є такі методи:
- forEach – для перебору масиву.
- filter – для фільтрації масиву.
- every/some – для перевірки масиву.
- map – для трансформації масиву в масив.
- reduce/reduceRight – для проходу по масиву з обчисленням значення.
- sort - сортує масив.
- Як об’єднати масиви?
1 - Можна використовувати метод concat().
2 - Можна використовувати spread оператор та об’єднати ці масиви в один загальний масив.
- Як дізнатися чи знаходиться елемент у масиві?
1 - Використати метод includes, який повертає true якщо елемент знаходиться у масиві.
2 - Використати метод indexOf, який повертає індекс знайденого елемента в масиві або -1 якщо елемента в масиві немає.
3 - також можна використати метод find, який повертає знайдений елемент, або повертає undefined.
- Що таке підняття (hoisting)?
Це механізм у JavaScript, в якому змінні та оголошення функцій, пересуваються вгору своєї області видимості перед тим, як код буде виконаний. Піднімаються змінні типу var та function declaration.
- Яким буде значення змінної var, якщо звернутися до неї до її оголошення?
Значенням змінної буде undefined.
- Що буде, якщо звернутися до змінної let/const до її оголошення?
Буде помилка типу ReferenceError. Змінної ще не існує
- Що таке область видимості (Scope)?
Це місце, де (або звідки) ми маємо доступ до змінних або функцій. JS має 4 типи областей видимості: глобальна, функціональна, блокова (ES6) та область видимості eval.
- Чим Function Declaration відрізняється від Function Expression?
Function Expression створюється, коли виконання доходить до нього, а потім вже може використовуватися.
Function Declaration можна використовувати у всьому скрипті (або блоці коду, якщо функцію оголошено в блоці).