JS CORE Flashcards
Які існують типи даних у JS?
Примітивні: string, number, symbol, boolean, null, undefined, bigint
Непримітивний: object
Як перевірити, чи об’єкт є масивом?
Array.isArray()
Як перевірити, чи число є скінченним?
isFinite(number)
Як перевірити, що змінна рівна NaN?
isNaN(variable)
Чим відрізняється поведінка isNaN() та Number.isNaN()?
Перше конвертує, друге ні
Порівняйте ключові слова var, let, const.
Порівняйте ключові слова var, let, const.
Що таке область видимості?
Область яка говорить про те де можна використати змінну
Що таке деструктуризація?
Процес розгортання масиву, або об’єкту з можливістю присвоєння до змінних
Для чого призначені методи setTimeout і setInterval?
Викликає ф-цію після затримки. setTimeout - викликає один раз, і setInterval - викликає інтервально
Порівняйте підходи роботи з асинхронним кодом: callbacks vs promises vs async/await.
Callback - функція, передана як аргумент іншій функції, для виконання пізніше.
Promise - об’єкт, який представляє результат асинхронної операції, яка може бути виконана або відхилена.
Async/await - синтаксис для роботи з promises, що робить асинхронний код схожим на синхронний.
Назвіть методи масивів, які пам’ятаєте, і скажіть, для чого вони потрібні.
push, pop, shift, unshift, slice, forEach
Які перебираючі методи масиву знаєте? У чому їхня відмінність?
map, filter, reduce, some, any
Map повертає новий масив значень
Filter порівнює значення і якщо тру повертає новий масив
Reduce повертає акамульоване значення
Some перевіряє чи є значення
Опишіть призначення і принципи роботи з колекціями Map і Set.
Map – це колекція ключ/значення, як і Object. Але основна відмінність полягає в тому, що Map дозволяє мати ключі будь-якого типу.
Set - це list унікальних значчень
Що означає глибока (deep) та поверхнева (shallow) копія об’єкта? Як зробити кожну з них?
Deep cloning - cтворює копію об’єкта та всіх вкладених об’єктів. stringify and then parse
Shallow cloning - створює копію об’єкта, але не копіює його вкладені об’єкти. (Object.assign({}, obj)
Який буде результат виконання коду?
let firstObj = { name: ‘Hello’ };
let secondObj = firstObj;
firstObj = { name: ‘Bye’ };
console.log(secondObj.name);
Hello
Що таке temporal dead zone?
Зона між початком block scope до ініціалізації змінної
Як працює boxing / unboxing у JavaScript?
Процес обгортання примітивного значення в об’єкт. Щоб unbox треба використовувати valueOf
У чому різниця між оператором in і методом hasOwnProperty?
in: Перевіряє, чи є властивість в об’єкті або його прототипі.
hasOwnProperty: Перевіряє, чи є властивість без урахування прототипу.
Опишіть, за допомогою чого в JS реалізуються такі ООП-парадигми, як інкапсуляція, поліморфізм, абстракція?
Наслідування: за допомогою прототипного наслідування. Кожний об’єкт має прототип, який може бути іншим об’єктом чи null
Інкапсуляція: за допомогою замикань та областей видимості
Поліморфізм: створення різних наслідуючих класів з одним і тим самим методом, але різними визначеннями цього методу
Абстракція: за допомогою класів (функцій контруктор)
Що таке прототип? Як працює прототипне наслідування в JS?
Усі об’єкти JavaScript успадковують властивості та методи від прототипу
Кожен об’єкт має __proto__. Лише функції та класи мають prototype
__proto__ відноситься до prototype об’єкта (функції/класу), з якого його було створено
Яка різниця між композицією та наслідуванням?
Композиція досягається вкладенням одного обєкту класу в інший. Наслідування створює новий клас на основі іншого
Чому не варто використовувати конструктори типу new String?
Створюэться об’єкт, а не примітив, тобто наприклад при поріняні буде видавати false
Принципи ооп
Інкапсуляція - можливість ховати непотрібну інформацію і імплементацію в контрольований спосіб. Розділяючи внутрішній інтерфейс від зовнішнього
Поліморфізм - використання методів з однаковою назвою, перезавантаження, інтерфейси
Абстракція - визначення спільного інтерфейсу, ігноруючи конкретні деталі реалізації
Наслідування - створення нового класу на основі іншого класу. Новий клас успадковує методи та властивості базового класу, та може розширювати його.
Чому typeof null повертає object?
Істориччна помилка. Мітка типу даних вказувала на 000 - object
Що таке приведення (перетворення) типів у JS?
Зміна типу з одного на інший
Явне за допомогою Number() String() …
Неявне в залежності від контексту використання 5+”10”
Що таке Garbage Collector?
Механіз, який відповідає за автоматичне видалення об’єктів, які більше не використовуються або не доступні.
Працює за механізмом Mark and Sweep
Маркує об’єкти які можна досягти, і видаляє недосяжні
Опишіть призначення і принципи роботи з колекціями WeakMap і WeakSet? Чим вони відрізняються від колекцій Map і Set відповідно?
Weak map - ключі мають бути об’єктами, Weak set - значення мають бути об’єктами
- В Map і Setелементи утримуються сильними посиланнями, і вони не видаляються автоматично з пам’яті.
- В WeakMap і WeakSet об’єкти використовуються через слабкі посилання, і вони можуть бути видалені з пам’яті, якщо немає інших сильних посилань на них.
Чим відрізняється Observable від Promise?
Проміс можуть обслуговувати тільки одни асинхроний івент, обзервебел з багатьма
Розкажіть про послідовне і паралельне виконання асинхронних функцій. У чому різниця між Promise.all() і Promise.allSettled()?
Promise.all() - паралельно виконує проміси, повертає результат всіх виконаних промісів, або перше відхилиння
Promise.allSettled() - паралельно виконує проміси, повертає результат всіх виконаних або не виконаних промісів
Що таке дескриптори властивостей об’єктів? Розкажіть про їхнє практичне застосування.
Це об’єкти, які містять інформацію про характеристики конкретної властивості. Дескриптори:
value
writable
-
configurable
- якщо тру то модна видаляти, або змінювати enumerable
get
set
Назвіть кілька способів створення незмінного об’єкта в JavaScript.
Object.freeze(), або скопьювати в нову змінну (…, Object.assign, stringify), у всіх властивостей встановити дескриптор на рідонлі
Навіщо потрібен конструктор Proxy? Наведіть приклад використання.
Об’єкт обгордка який перехоплює хендлери (get, set, apply, construct), і може змінювати їх
Розкажіть про генератори та ітератори.
Генератори - це функції в JavaScript, які можуть бути призупинені та відновлені під час виклику.
function* для стоврення генератора. yield для повернення значення
Ітератор - це об’єкти, які мають метод next(), який повертає об’єкт з властивістю value
Що таке Symbol?
Symbol в JavaScript - це примітивний тип даних, що представляє собою унікальний ідентифікатор.
Що таке hoisting?
Всі оголошення переміщуються на гору поточної області видимості.
- var піднімається і стає undefined, якщо не була ініціалізована
- let i const піднімаються і залишаються в стані не ініціалізованому
- функції піднімаються і можуть бути викликані будь де
- анонімні і стрілочні не піднімаються
Що таке scope (Область видимості) і які бувають види?
Блочна область видимості - змінні let і const всередині фігурних скобок { }. Var не має блочного scope
Область видимості функції - змінні всередині функції
Глобальна область видимості - змінні поза функції
Контекст і this
this
keyword refers to an object. Which object depends on how this
is being invoked
In an object method, this refers to the object.
Alone, this refers to the global object.
In a function, this refers to the global object.
In a function, in strict mode, this is undefined.
In an event, this refers to the element that received the event.
Methods like call(), apply(), and bind() can refer this to any object.
Різниця між function declaration and arrow function
- Синтаксис
- function this - визначаєтся в момент виклику
arrow this - не має свого контексту, тому успадковують контекст в якому були створені - Arrow не має об’єкту arguments
- Arrоw не можна бути використана як конструктор
- Not hoisted не можуть бути визвані до того як вони задекларовані
Що таке closure? І для чого вона існує?
Замикання (Closure) - це функція, яка має доступ до області видимості батьківської функції, навіть після закриття батьківської функції. Це можливість JavaScript створювати приватні змінні.
Для використання замикання слід оголосити функцію всередині іншої функції і повернути її. Для викриття функції слід повернути її або передати її в іншу функцію.
Лексичне середовище (Lexical Environment) - це об’єкт, який зберігає інформацію про локальну область видимості та область видимості батьківської функції.
Різниця між Contructor and Function Factory
Функції-фабрики та конструктори - це функції, які допомагають створювати об’єкти.
Відмінність полягає в тому, що конструктор використовується з ключовим словом new, яке додає this всередину функції і повертатає об’єкти. Фабрична функція, з іншого боку, це просто функція, яка повертає об’єкти.
Крім того, конструктори дозволяють створювати приватні функції за допомогою об’єкта прототипу.
Яка різниця між декларацією функції (function declaration) та функціональним виразом (function expression)?
Різниція в синтаксисі, а також в тому що function declaration is hoisted, function expression - no. So first can be called even before declaration, another one not
Що таке рекурсія?
Це коли ф-ція викликає саму себе поки не досягне базового випадку якій зупиняє її
Що означає ключове слово this?
Вказує на обє’кт, до якого відноситься поточний код
Що таке втрата контексту, коли відбувається і як їй запобігти?
this втрачає зв’зок з обє’ктом.
Це може статися при використанні стрілкових ф-цій, виклик ф-ції з методу
Уникнути можна стрілкові bind, apply, call
Методи функцій bind / call / apply — навіщо і в чому різниця?
Для надання контектсу this
bind - прив’язує контекст
apply - прив’язує контекст і викликає ф-цію. Передається масив аргументів
call - прив’язує контекст і викликає ф-цію. Передаються аргументи через кому
Поясніть, що означає currying. Наведіть приклад використання на практиці.
Функція з багатьма аргументами перетворюється на послідовність функцій, кожна з яких має тільки один аргумент.
Що таке мемоізація
Техніка кешування результатів виклику ф-цій. Може бути використана для запам’ятання складних операцій
Що таке чейнінг
Можливість послідовного виклику ф-цій на тому самому об’єкті. Досягається шляхом поверненя цього ж об’єкту знову