5865 просмотров
от 4 июня 2024
JavaScript

Вопросы и ответы с собеседований по JavaScript

Вопросы и ответы по JavaScript для собеседования фронтенд-разработчика. Что такое ECMAScript, как работает цикл событий (Event Loop), область видимости, замыкание, какое значение у this, что такое Hoisting, что скрывает Shadow DOM, как устроены прототипы и многое другое.

1

Что такое ECMAScript?

ECMAScript — это спецификация, стандарт скриптовых языков программирования, он является основой JS, поэтому любые изменения ECMAScript отражаются на JS. ECMAScript сам по себе - это не язык программирования. А вот JavaScript - это язык программирования, реализующий стандарт ECMAScript. Чем отличаются JavaScript и ECMAScript? ECMAScript 2015, 2016, 2017, 2018, 2019, 2020, 2021

Комментарии
0/3000
2

Какие различия между ES5 и ES6?

ECMAScript 5 (ES5) — 5-е издание ECMAScript, выпущенное в 2009 году. Поддерживается современными браузерами практически полностью. ECMAScript 6 (ECMAScript 2016, ES6) — 6-е издание ECMAScript, выпущенное в 2015 году. Частично поддерживается большинством современных браузеров. Несколько ключевых отличий двух стандартов: 1. Стрелочные функции и интерполяция в строках // В новом стандарте можно сделать так: const greetings = (name) => { return `hello ${name}`; } // и даже так: const greetings = name => `hello ${name}` 2. Ключевое слово const Константы в JavaScript отличаются от констант в других языках программирования. Они сохраняют неизменной только ссылку на значение. Таким образом, вы можете добавлять, удалять и изменять свойства объявленного константным объекта, но не можете перезаписать текущую переменную, в которой лежит этот объект. const NAMES = []; NAMES.push("Jim"); console.log(NAMES.length === 1); // true NAMES = ["Steve", "John"]; // error 3. Блочная видимость Переменные, объявленные с помощью новых ключевых слов let и const имеют блочную область видимости, то есть недоступны за пределами {}-блоков. Кроме того, они не поднимаются, как var-переменные. 4. Параметры по умолчанию Теперь функцию можно инициализировать с дефолтным значением параметров. Оно будет использовано, если параметр не будет передан при вызове. function multiply (a, b = 2) { return a * b; } multiply(5); // 10 5. Классы и наследование Новый стандарт ввел в язык поддержку привычного синтаксиса классов (class), конструкторы (constructor) и ключевое слово extend для оформления наследования. 6. Оператор for-of для перебора итерируемых объектов в цикле 7. spread и rest операторы const obj1 = { a: 1, b: 2 } const obj2 = { a: 2, c: 3, d: 4} const obj3 = {...obj1, ...obj2} 8. Обещания (Promises) Механизм для обработки результатов и ошибок асинхронных операций. По сути, это то же самое, что и коллбэки, но гораздо удобнее. Например, промисы можно чейнить (объединять в цепочки). const isGreater = (a, b) => { return new Promise ((resolve, reject) => { if(a > b) { resolve(true) } else { reject(false) } }) } isGreater(1, 2) .then(result => { console.log('greater') }) .catch(result => { console.log('smaller') }) 9. Модули Способ разбития кода на отдельные модули, которые можно импортировать при необходимости. import myModule from './myModule'; Синтаксис экспорта позволяет выделить функциональность модуля: const myModule = { x: 1, y: () => { console.log('This is ES5') } } export default myModule;

Комментарии
0/3000
3

Что такое операторы spread и rest?

Spread оператор (оператор расширения) "берет" каждый отдельный элемент итерируемого объекта (массив) и "распаковывает" его в другой итерируемый объект (массив). К итерируемым объектам можно отнести все, что можно перебрать с помощью цикла for..of. Большая часть задач, где приходится использовать оператор spread, касается массивов и строк. Так будет выглядеть создание одного общего массива с помощью оператора spread: const tvSeriesOne = ['Ozark', 'Fargo', 'Dexter']; const tvSeriesTwo = ['Mr. Robot', 'Barry', 'Suits']; const tvSeries = [...tvSeriesOne, ...tvSeriesTwo]; console.log(tvSeries); // [ "Ozark", "Fargo", "Dexter", "Mr. Robot", "Barry", "Suits" ] Оператор rest (три точки) похож на оператор spread, но выполняет противоположную функцию. Spread забирает каждый элемент из массива и распаковывает в новый массив. Оператор rest забирает каждый элемент из массива и создает из них новый массив. Есть 2 типа задач, где оператор rest используется чаще всего – в функциях и в процессе деструктуризации. function buyPizza(price, ...rest) { console.log(price); // 500 console.log(rest); // Array(4) [ 3, 10, 6, 20 ] } buyPizza(500, 3, 10, 6, 20); const pizza = ['Pepperoni', 2222, 5, 6, 10, 30, 1]; const [name, id, ...rest] = pizza; console.log(name); // Pepperoni console.log(id); // 2222 console.log(rest); // [ 5, 6, 10, 30, 1 ] 7 трюков с Rest и Spread операторами при работе c JS объектами

Комментарии
0/3000
4

Что такое деструктуризация?

Деструктуризация в JavaScript позволяет извлечь данные из массива или свойства объекта и присвоить их отдельным переменным. Деструктуризация удобна тем, что позволяет не писать лишний код для доступа к данным внутри объектов/массивов по индексам или ключам. Деструктуризация массива: let array = [1, 2, 3]; let [x, y, z] = array; console.log(x); // 1 console.log(y); // 2 console.log(z); // 3 Деструктуризация объекта: let user = { name: "Василий", lastname: "Пупкин", age: 30 }; let {name, lastname, age} = user; console.log(name); // "Василий" console.log(lastname); // "Пупкин" console.log(age); // 30 Вы не знаете деструктуризацию, пока

Комментарии
0/3000
5

Перечислите типы данных JavaScript

6

Что такое Map?

Map – это коллекция ключ/значение наподобие Object, но с более удобным и декларативным API и некоторыми функциональными особенностями. Например, Map позволяет использовать ключи любого типа. Методы и свойства: new Map() – создаёт коллекцию. Map.prototype.set(key, value) – записывает по ключу key значение value. Map.prototype.get(key) – возвращает значение по ключу или undefined, если ключ key отсутствует. Map.prototype.has(key) – возвращает true, если ключ key присутствует в коллекции, иначе false. Map.prototype.delete(key) – удаляет элемент (пару «ключ/значение») по ключу key. Map.prototype.clear() – очищает коллекцию от всех элементов. Map.prototype.size – возвращает текущее количество элементов. let map = new Map(); map.set("1", "str1"); // строка в качестве ключа map.set(1, "num1"); // цифра как ключ map.set(true, "bool1"); // булево значение как ключ // помните, обычный объект Object приводит ключи к строкам? // Map сохраняет тип ключей, так что в этом случае сохранится 2 разных значения: alert(map.get(1)); // "num1" alert(map.get("1")); // "str1" alert(map.size); // 3 Для перебора коллекции Map есть 3 метода: Map.prototype.keys() – возвращает итерируемый объект по ключам, Map.prototype.values() – возвращает итерируемый объект по значениям, Map.prototype.entries() – возвращает итерируемый объект по парам вида [ключ, значение], этот вариант используется по умолчанию в for..of. В отличие от обычных объектов, в Map перебор происходит в том же порядке, в каком происходило добавление элементов.

Комментарии
0/3000
7

Что такое Set?

Set – это особый вид коллекции: «множество» значений (без ключей), где каждое значение может появляться только один раз. Его основные методы это: new Set(iterable) – создаёт Set, и если в качестве аргумента был предоставлен итерируемый объект (обычно это массив), то копирует его значения в новый Set. Set.prototype.add(value) – добавляет значение (если оно уже есть, то ничего не делает), возвращает тот же объект Set. Set.prototype.delete(value) – удаляет значение, возвращает true, если value было в множестве на момент вызова, иначе false. Set.prototype.has(value) – возвращает true, если значение присутствует в множестве, иначе false. Set.prototype.clear() – удаляет все имеющиеся значения. Set.prototype.size – возвращает количество элементов в множестве. Основная «изюминка» – это то, что при повторных вызовах set.add() с одним и тем же значением, оно добавляется в коллекцию лишь единожды. Set имеет те же встроенные методы для перебора коллекции, что и Map: Set.prototype.keys() – возвращает перебираемый объект для значений, Set.prototype.values() – то же самое, что и set.keys(), присутствует для обратной совместимости с Map, Set.prototype.entries() – возвращает перебираемый объект для пар вида [значение, значение], присутствует для обратной совместимости с Map. Ускоряем JavaScript-код с использованием типа данных Set

Комментарии
0/3000
8

Что такое цикл событий?

Цикл событий - это механизм, на каждом тике выполняющий функции из стека вызовов и, если он оказывается пустым, перемещающий задачи из очереди задач в стек вызовов для выполнения. Лежит в основе функционирования любого JavaScript-движка. Стек вызовов - это структура данных (первым вошел, последним вышел), используемая для отслеживания порядка выполнения функций в текущем контексте (области видимости). Очередь задач - это структура данных (первым вошел, первым вышел), используемая для отслеживания выполнения асинхронных функций, готовых оказаться в стеке вызовов. Что ты такое, Event Loop? Или как устроен цикл событий в браузере Chrome Как работает JS: цикл событий, асинхронность и пять способов улучшения кода с помощью async / await

Комментарии
0/3000
9

Что такое область видимости?

Область видимости — это область, ограничивающая доступ к переменным и функциям внутри себя, как бы инкапсулирующая их. JS имеет три типа областей видимости: глобальная, функциональная и блочная (ES6). Глобальная — переменные и функции, объявленные в глобальном пространстве имен, имеют глобальную область видимости и доступны из любого места в коде. Функциональная — переменные, функции и параметры, объявленные внутри функции, доступны только внутри этой функции. Блочная — переменные, объявленные с помощью ключевых слов let и const, доступны только внутри блока {}, в котором были объявлены. Область видимости — это также набор правил, по которым осуществляется поиск переменной. Если переменной не существует в текущей области видимости, ее поиск производится выше, во внешней по отношению к текущей области видимости. Если и во внешней области видимости переменная отсутствует, ее поиск продолжается вплоть до глобальной области видимости. Если в глобальной области видимости переменная обнаружена, поиск прекращается, если нет — выбрасывается исключение. Поиск осуществляется по ближайшим к текущей областям видимости и останавливается с нахождением переменной. Это называется цепочкой областей видимости (Scope Chain). Область видимости в JavaScript и «поднятие» переменных и объявлений функций Области видимости в JavaScript

Комментарии
0/3000
10

Какое значение у "this"?

this ссылается на значение объекта, который в данный момент выполняет функцию. В конструкторе класса, например, this будет указывать на создаваемый экземпляр. На самом верхнем уровне исполнения this будет указывать на глобальный объект (window в браузере). Function.prototype.call и Function.prototype.apply принимают в качестве первого аргумента объект, который будет являться значением this внутри функции. Function.prototype.bind позволяет создать новую функцию с подмененным контекстом (this). Стрелочные функции не имеют собственного значения this. Они копируют значение this из внешнего лексического окружения. Ключевое слово this в javascript — учимся определять контекст на практике Ключевое слово this в JavaScript. Полное* руководство

Комментарии
0/3000
Авторизуйтесь, чтобы открыть доступ к контенту
12

Что такое замыкание?

13

Что такое DOM?

14

Что такое Shadow DOM?

15

Что такое Event Propagation?

16

Что такое всплытие события?

17

Что такое погружение события?

18

Зачем нужны e.preventDefault() и e.stopPropagation()?

19

Что такое делегирование событий?

20

Что такое строгий режим ("use strict")?

21

Различия между «var», «let» и «const»

22

Что такое приведение типов?

23

В чем разница между "==" и "==="?

24

Почему "typeof null" возвращает "object"?

25

В чем разница между "null" и "undefined"?

26

Зачем нужен тип данных Symbol?

27

Можно ли сравнить объекты оператором сравнения?

28

Как выполняется клонирование объекта?

29

Что такое поднятие переменных (Hoisting)?

30

В чем разница между обычной функцией и функциональным выражением?

31

Что такое прототип объекта?

32

Как создать объект без прототипа?

33

Как проверить наличие свойства в объекте?

34

Что такое объектная обертка (Wrapper Objects)?

35

Что такое классы?

36

Для чего используется ключевое слово «new»?

37

Что такое Function.prototype.apply?

38

Что такое Function.prototype.call?

39

Что такое Function.prototype.bind?

40

Что такое объект arguments?

41

Что такое IIFE?

42

Что такое стрелочные функции?

43

Что такое Promise (Обещания)?

44

Перечислите методы Promise.*

45

Что такое async/await?

46

Как проверить, является ли объект массивом?

47

Какие есть способы перебора массива?

48

Как очистить массив?

49

Перечислите методы Array.prototype.*

50

Что такое шаблонные литералы?

51

Что такое модули?

52

Что такое функция обратного вызова (Callback Function)?

53

Что такое полифиллы и шимы (shim)?

54

Что такое транспиляция?

55

Почему 0.1 + 0.2 === 0.3 — это false?

56

Что такое генераторы?

57

Какие существуют методы для хранения данных в браузере?

58

В чем разница между sessionStorage и localStorage?

59

В чем разница между WeakSet, WeakMap и обычными Set и Map?

Смежные категории
React
24 вопроса
Шпаргалка по полезным хукам для React-разработчика
1992 просмотра
Vue
15 вопросов
Вопросы и ответы с собеседований по Vue.js
1662 просмотра
Angular
74 вопроса
Вопросы и ответы с собеседований по Angular
1565 просмотров
TypeScript
21 вопрос
Вопросы и ответы с собеседований по TypeScript
3153 просмотра
CSS
19 вопросов
Вопросы и ответы с собеседований по CSS
1936 просмотров
React
25 вопросов
Вопросы и ответы с собеседований по React.js
2940 просмотров
Рекомендуем
Computer Science
12 вопросов
Вопросы с собеседований про операционные системы
1022 просмотра
Computer Science
13 вопросов
Вопросы и ответы с собеседований про ООП
1152 просмотра
Computer Science
28 вопросов
Объяснение паттернов проектирования с примерами
1356 просмотров
Базы данных
60 вопросов
Вопросы и ответы с собеседований по SQL
2227 просмотров
Computer Science
15 вопросов
Вопросы и ответы с собеседований по DDD
1457 просмотров
Git
20 вопросов
Вопросы и ответы с собеседований по Git
1737 просмотров
Другие разделы

Лента

Активность пользователей Девстанции

Перейти к ленте

Лидеры

Рейтинг самых результативных пользователей сообщества

Перейти к лидерам

Треды

Общение по интересам и связь с разработчиками

Перейти к тредам

Задачи

Решение алгоритмических задач с собеседований

Перейти к задачам

Вопросы

Ответы на вопросы с технических собеседований

Вы находитесь здесь

Викторины

Интерактивные викторины по вопросам с собеседований

Перейти к викторинам
Мы в Telegram
Новости проекта, общение с разработчиками, общение по интересам - присоединяйтесь!