Вопросы для собеседования по 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.clonedeep
JSON.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.