Вопросы для собеседования по JavaScript
Типы данных
Какие типы данных существуют?
В чем разница между null и undefined?
- При
undefinedпеременной не явно присвоено значениепусто - При
nullпеременной явно присвоено значениепусто
Какие значения в JS являются ложными?
Значения результатом логическое преобразования которых является значение false.
const falsyValues = ['', 0, null, undefined, NaN, false]
Как узнать что в переменную пришел array?
В чем разница между операторами == и ===?
== неявно сравнивает значения после их преобразования или приведения к одному типу coersion, а второй — явно без преобразования.
Почему результатом сравнения двух похожих объектов является false?
Можно ли сравнивать ссылочные типы данных?
Можно, но сравниваться будут ссылки на объект, а не их содержимое.
const data = {}
const anotherData = data
console.log(data === anotherData) // trueСравнение операторами работать не будет:
const cat = { name: 'Феликс' }
const dog = { name: 'Феликс' }
console.log(cat === dog) // falseЧто такое оператор нулевого слияния nulish coalesing?
Оператор ?? возвращает значение выражения справа, если слева содержится null или undefined
Преобразование данных
Как происходит преобразование данных?
Ссылочные типы данных имеют 2 прототипа, которые при преобразовании вызываются по очереди:
Изменение примитивных данных имеет особенности, например содержимое строки в JavaScript изменить нельзя:
let str = 'Hi'; str[0] = 'h' // str не изменится
Почему оператор + является самым быстрым способом преобразования строки в число?
Согласно MDN оператор + преобразует строку в число не выполняя никаких операций со значением, которое является числом
Другое
Для чего нужен cтрогий режим в JavaScript?
Что такое конструктор new?
- Cоздает новый экземпляр класса
- Устанавливает контекст
thisна созданную сущность - Отправляет аргументы к конструктор
- Функция вызванная через
newвсегда возвращает объект
Что такое object descriptor ?
Это объект который описывает свойства и методы объекта, состоит из:
value: any(любая сущность — число, объект, функция)writable: boolean(можем ли мы перезаписывать объект)configurable: boolean(можем ли изменять объект используяdefineProperty)enumerable: boolean(можем ли итерировать объект при помощиfor...inилиObject.keys())get: boolean(включить геттер)set: boolean(включить сеттер)
Что такое геттеры и сеттеры?
Как в JS можно создать объект?
- Литерал объекта
{} - При помощи конструктора и глобального объекта
new Object - При помощи метода глобального объекта
Object.create() - Object.fromEntries(entries)
Как в JS можно скопировать объект?
- Поверхностно (shallow)
- Глубоко (deep)
- Способы
- structuredClone (Node JS >17)
lodash.clonedeepJSON.stringify
Что такое прототипное наследование?
Разница prototype vs proto vs [[Prototype]]?
Как можно заблокировать поле объекта для перезаписи?
Области видимости (scope)
ES6
Web API
What is WEB API?
> fetch setTimeout querySelector
Механизм общения между окнами, фреймами и воркер
> `window.postMessage`
How to make async requests in JS?
> `xmlhttprequest` `AJAX` `fetch` `axios`
Can we canceling a fetch request?
> `new AbortController()`
How we work with acync requests results?
> `promises` `async/await` `callbacks`
What is Promise?
> Constructor that recieve function that pass into here self 2 arguments `resolve` `reject`
> Has 2 properties `state` и `result`
> States: `pending` `fulfilled` `rejected`
> Для обработки результата этих состояний используются методы `.then`, `.catch`, `.finally`.
`.finaly` сработает когда промис завершится независимо от успеха/ошибки, просто пропускай цепочку промисов дальше. Хорошо подходит для остановки идикатора загрузки.
Методы работы с множеством промисов?
> `Promise.all` - принимает много промисов, возвращает новый когда все завершатся. Если один из промисов вернется с ошибкой, `Promise.all` вернется с этой ошибкой.
> `Promise.allSettled` - возвращает ошибочные и успешные результаты
> `Promise.race` - берет результат первого выполненного промиса
> `Promise.any` - тоже что all, но вернет ошибку только если все промисы вернут ошибку
Что такое async/await и как оно работают?
> `async/await` это просто «синтаксический сахар» для получения результата промиса, более наглядный, чем promise.then.
> Любую функцию можно сделать асинхронной поставив перед ней `async`, такая фун-я всегда возвращает промис.
What is Response in promise?
What metadata exist in Response?
> `headers` `status` `statusText` `type` `url`
In which types we can transform Responce?
> `.arrayBuffer()` `response.blob()` `response.error()` `response.formData()` `response.formData()` `response.json()` `response.text()`
Is response Promise reject on HTTP errors?
> It only rejects when encountering a network error. So we must use then() to check for HTTP errors with response.ok status and/or response.status properties.