Превратите тревогу перед собеседованием в уверенность
1. Что такое JavaScript?
JavaScript — это высокоуровневый интерпретируемый язык программирования. Это язык, который также характеризуется как динамический, слабо типизированный, основанный на прототипах и мультипарадигмальный. JavaScript, используемый для улучшения взаимодействия с веб-страницами и предоставления интерактивных элементов пользовательскому интерфейсу, является неотъемлемой частью веб-приложений.
«Я всегда говорил, что Java для JavaScript — то же, что ветчина для хомяка!» — посмеивается ваш интервьюер.
Всегда помните, что, несмотря на сходство названий, Java и JavaScript — совершенно разные языки.
2. Какие существуют типы данных в JavaScript?
JavaScript имеет семь основных типов данных:
- Число. Представляет как целые числа, так и числа с плавающей запятой.
- Строка: последовательность символов, используемая для хранения текста.
- Boolean: True или False.
- Null: этот тип имеет только одно значение, null.
- Не определено: переменная, которой не присвоено значение.
- Объект: пары "ключ-значение" для сбора данных.
- Символ: используется для свойств анонимных объектов.
«Что, если я скажу вам, что null — это объект в JavaScript?» — спросите вы с ухмылкой.
Да, это забавная мелочь, что typeof null
в JavaScript возвращает "object"
.
3. Как вы организуете свой код в JavaScript? Обсудите модули и синтаксис импорта/экспорта.
Организация вашего кода имеет решающее значение в больших приложениях JavaScript. Одним из эффективных способов сделать это является использование модулей. Модуль — это, по сути, отдельный файл JavaScript, содержащий функции или переменные, которые можно использовать в других файлах.
Синтаксис импорта/экспорта, представленный в ES6, позволяет легко использовать модули. Вы можете экспортировать функции, объекты или значения из модуля, добавив ключевое слово export
перед их объявлением.
Вот пример:
// module.js export const greet = () => { console.log("Hello, world!"); };
Чтобы использовать эту функцию в другом файле, вы должны использовать ключевое слово import
:
// app.js import { greet } from './module.js'; greet(); // Logs "Hello, world!"
4. Как работает прототипное наследование в JavaScript?
В JavaScript все объекты имеют скрытое свойство [[Prototype]]
, которое является либо другим объектом, либо null
. Мы можем использовать его для добавления новых свойств или методов к существующим объектам. Это свойство используется JavaScript для целей наследования.
«Вы когда-нибудь чувствовали, что мы все просто прототипы более высокого объекта в JavaScript?» — размышляете вы вслух.
Ваш интервьюер приподнимает бровь, вероятно, добавляя дополнительный балл за креативность.
5. В чем разница между ==
и ===
в JavaScript?
Оператор ==
проверяет только равенство значений, тогда как оператор ===
проверяет и значение, и тип. Вот почему JavaScript иногда дает забавные результаты, например, 0 == false
верно, а 0 === false
ложно.
"Вы когда-нибудь думали, что в JavaScript "тройное равенство" более равно, чем "двойное равенство"? Захватывающая концепция, не правда ли?»
6. Какие существуют способы определения функции в JavaScript?
JavaScript предоставляет несколько способов определения функции:
- Объявление функции: определяет именованную функцию.
function sayHello() { console.log('Hello!'); }
- Выражение функции: определяет функцию в выражении.
var sayHello = function() { console.log('Hello!'); };
- Функция стрелки. Представленная в ES6, она предоставляет новый синтаксис для определения функций.
const sayHello = () => console.log('Hello!');
«Если бы функции JavaScript были группой, держу пари, Arrow Function была бы классным новым барабанщиком!»
7. Что такое подъем в JavaScript?
Подъем — это механизм JavaScript, в котором объявления переменных и функций перемещаются в верхнюю часть их области видимости на этапе компиляции. Однако поднимаются только объявления, а не инициализация.
console.log(myVar); // Output: undefined var myVar = 5;
"В стране JavaScript все стремится к вершине — это социальный альпинист среди языков программирования!"
8. Каково использование ключевого слова this
в JavaScript?
В JavaScript ключевое слово this
относится к объекту, свойством которого является функция. Значение this
зависит от контекста вызова функции и от того, где она вызывается.
"Это только мне кажется или ключевое слово this
имеет серьезные проблемы с идентификацией?"
9. Что такое цикл событий в JavaScript?
Цикл событий — это процесс в JavaScript, который обрабатывает внешние события и преобразует их в функции обратного вызова. Он отвечает за выполнение кода, сбор и обработку событий и выполнение поставленных в очередь подзадач. Цикл событий сделал JavaScript действительно асинхронным и, следовательно, неблокирующим.
"Что происходит, то происходит в цикле событий!"
10. Что такое обещание в JavaScript?
Промис в JavaScript — это объект, который в будущем может выдать единственное значение: либо разрешенное значение, либо причина, по которой оно не разрешено (например, сетевая ошибка).
let promise = new Promise(function(resolve, reject) { // A mock async action using setTimeout setTimeout(function() { resolve('Success!'); }, 500); }); promise.then(function(successMessage) { console.log(successMessage); // 'Success!' });
"Обещания в JavaScript — как и ваши тренировки в спортзале, их еще может не быть, но они уже выполняются!"
11. Что такое остальные параметры и синтаксис распространения в JavaScript? Можете ли вы привести пример?
Параметр rest и синтаксис расширения — это две взаимосвязанные концепции в JavaScript, обе из которых включают оператор ...
.
Параметр rest позволяет функции принимать неопределенное количество аргументов в виде массива.
Вот пример:
function sum(...numbers) { let total = 0; for(let number of numbers) { total += number; } return total; } console.log(sum(1, 2, 3, 4)); // Logs 10
Синтаксис расширения, с другой стороны, позволяет расширять итерируемый объект, такой как массив, в местах, где ожидается ноль или более аргументов или элементов.
Например:
let arr1 = [1, 2, 3]; let arr2 = [...arr1, 4, 5]; console.log(arr2); // Logs [1, 2, 3, 4, 5]
12. Что такое IIFE (немедленно вызываемое функциональное выражение) в JavaScript?
IIFE — это функция JavaScript, которая запускается, как только она определена. Синтаксис следующий:
(function () { var message = 'Hello, World!'; console.log(message); // 'Hello, World!' })();
«IIFE — это гость на вечеринке, который появляется и тут же уходит. Никаких глупостей!»
13. В чем разница между null
и undefined
в JavaScript?
В JavaScript undefined
означает, что переменная объявлена, но ей еще не присвоено значение. С другой стороны, null
— это значение присваивания, которое не представляет ни значения, ни объекта.
“undefined
похож на пустую коробку для завтрака, а null
похож на коробку для завтрака с запиской "Сегодня обеда нет".
14. Каково назначение оператора typeof
в JavaScript?
typeof
— это оператор в JavaScript, который возвращает строку, указывающую тип операнда! Это полезно, когда вам нужно обрабатывать значения по-разному в зависимости от их типа данных.
console.log(typeof 'Hello World'); // Returns "string"
“‘typeof’: быстрый способ определить тип вашей переменной!”
15. Можете ли вы объяснить, что делает метод JavaScript bind()
?
Метод bind()
создает новую функцию, которая при вызове имеет ключевое слово this
, установленное в указанное значение. Он обычно используется при работе с обработчиками событий и обратными вызовами, особенно в проектах React.js.
let obj = { num: 2 }; let addToThis = function(a, b, c){ return this.num + a + b + c; }; let bound = addToThis.bind(obj); console.log(bound(1, 2, 3)); // Returns 8
"Bind(): ваш лучший друг, когда this
не то, что вы думаете!"
16. Что такое функция обратного вызова JavaScript?
В JavaScript функция обратного вызова — это функция, передаваемая в другую функцию в качестве аргумента, которая затем вызывается внутри внешней функции.
function greeting(name) { alert('Hello ' + name); } function processUserInput(callback) { let name = prompt('Please enter your name.'); callback(name); } processUserInput(greeting);
"Функции обратного вызова. Иногда JavaScript любит говорить: "Подождите, я вам перезвоню!"
17. Что такое стрелочные функции в JavaScript?
Стрелочные функции, представленные в ES6, предлагают более лаконичный синтаксис для написания функциональных выражений за счет пропуска ключевого слова function
. Они также лексически связывают значение this
и всегда анонимны.
let hello = name => `Hello, ${name}!`; console.log(hello('World')); // 'Hello, World!'
"Стрелочные функции — хипстерский способ написания функций, скудный, подлый и очень чистый!"
18. Что делает «use strict» в JavaScript?
«use strict» — это буквальное выражение, которое было введено в ECMAScript 5. Это способ добровольно применить более строгий синтаксический анализ и обработку ошибок в вашем коде JavaScript.
"Используйте строгие правила: иногда вам просто нужно установить закон в своем кодексе!"
19. Что такое деструктурирующее присваивание в JavaScript?
Деструктурирующее присваивание в JavaScript — это синтаксис, который позволяет нам распаковывать значения из массивов или свойства из объектов в отдельные переменные.
let [x, y, ...rest] = [10, 20, 30, 40, 50]; console.log(x); // 10 console.log(rest); // [30, 40, 50]
"Разрушение структуры: зачем тратить время на доступ к элементам массива или свойствам объектов один за другим?"
20. Каковы преимущества и недостатки использования async/await
в JavaScript?
Синтаксис async/await
в JavaScript представляет собой комбинацию промисов и генераторов, чтобы уменьшить шаблон вокруг промисов и «синхронно» выполнять асинхронные действия.
Преимущества использования async/await
включают:
- Делает асинхронный код похожим на синхронный. Это может облегчить чтение и понимание кода.
- Позволяет использовать обработку ошибок
try/catch
вместо.catch()
для промисов.
К недостаткам async/await
относятся:
- Это потенциально может создать проблемы с производительностью, поскольку блокирует выполнение вашего кода, что не всегда может быть лучшим подходом.
- Об обработке ошибок можно легко забыть, так как вам нужно помнить о заключении кода в блок try/catch. Если вы забудете, исключения останутся неперехваченными.
async function myFunction() { try { const result = await someAsyncCall(); } catch (error) { console.error(error); } }
21. Что такое шаблонные литералы JavaScript?
Литералы шаблонов JavaScript — это строковые литералы, допускающие встроенные выражения, многострочные строки и интерполяцию строк.
let name = 'John'; console.log(`Hello, ${name}!`); // Hello, John!
"Шаблонные литералы: обратные кавычки (`) становятся волшебной палочкой!"
22. Что такое генераторы JavaScript?
Генераторы — это специальные функции в JavaScript, из которых можно выйти, а затем снова войти с их контекстом (привязками переменных), сохраненным при повторных входах.
function* idMaker() { var index = 0; while (true) yield index++; } var gen = idMaker(); console.log(gen.next().value); // 0 console.log(gen.next().value); // 1
«Генераторы: иногда функции JavaScript тоже любят делать перерывы!»
23. Что такое замыкание в JavaScript?
Замыкание в JavaScript — это функция, которая запоминает среду, в которой она была создана. Он имеет доступ к своей области видимости, области действия внешней функции и глобальной области видимости.
function outer() { let count = 0; function increment() { count++; console.log(count); } return increment; } let myFunc = outer(); myFunc(); // 1 myFunc(); // 2
«Замыкания: они как личный дневник JavaScript — всегда помните обо всем!»
24. Объясните делегирование событий в JavaScript
Делегирование событий в JavaScript — это метод, в котором используется один прослушиватель событий для управления всеми событиями, которые могут произойти с определенными элементами или наборами элементов.
document.querySelector('body').addEventListener('click', function(event) { if(event.target.tagName.toLowerCase() === 'button') { console.log('Button clicked!'); } });
"Делегирование событий: потому что иногда легче слушать слухи!"
25. Как JavaScript обрабатывает асинхронные операции?
JavaScript обрабатывает асинхронные операции с обратными вызовами, промисами и async/await. Эти функции позволяют JavaScript выполнять другие задачи, не дожидаясь завершения асинхронной операции.
«Асинхронные операции: например, стирка во время просмотра телевизора. Обе задачи выполняются, просто не одновременно!»
26. Как глубоко клонировать объект в JavaScript?
Одним из распространенных способов глубокого клонирования объекта в JavaScript является использование методов JSON.parse и JSON.stringify.
let obj = {a: 1, b: 2}; let cloneObj = JSON.parse(JSON.stringify(obj));
"Глубокое клонирование: потому что иногда ксероксная копия недостаточно хороша!"
27. Что такое NaN в JavaScript?
NaN означает «не число». Это специальное значение, указывающее, что в математической операции использовалось нечисловое значение.
console.log(Math.sqrt(-1)); // NaN
"NaN: способ JavaScript сказать: "Хорошая попытка, но это не число!"
28. Как создать класс JavaScript?
В JavaScript классы — это специальные функции, которые можно определить с помощью ключевого слова class
.
class MyClass { constructor(name) { this.name = name; } } let obj = new MyClass('John');
"Классы JavaScript: как формочки для печенья для ваших объектов кода!"
29. Что такое «новое» ключевое слово в JavaScript?
Ключевое слово «новое» в JavaScript используется для создания экземпляра определяемого пользователем типа объекта или одного из встроенных типов объектов.
let myDate = new Date();
«Новинка»: волшебное слово, позволяющее оживить объекты JavaScript!»
30. Как JavaScript обрабатывает асинхронные операции? Опишите на примерах.
Асинхронные операции — ключевая особенность JavaScript, позволяющая выполнять несколько действий одновременно. JavaScript может выполнять код, ожидая завершения других операций, таких как выборка данных. Это достигается с помощью различных методов, таких как обратные вызовы, промисы и синтаксис async/await.
Базовым примером асинхронных операций является функция setTimeout
, которая планирует выполнение кода после заданного периода времени, не блокируя при этом выполнение последующего кода.
Например:
console.log("First"); setTimeout(() => { console.log("Second"); }, 2000); console.log("Third");
В приведенном выше примере вывод будет «Первый», «Третий» и «Второй», потому что setTimeout
не блокирует, а остальная часть кода продолжает выполняться.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"
🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу