Краткие вводные: В данный период жизни у меня ведётся поиск нового места работы, в связи с этим перерыл кучу полезного материала и составил для себя список вопросов для собесов. Отлично, начнём с первых 10 вопросов из раздела JavaScript пусть это будет и примитивно, зато база. Буду писать по большей части для себя.
- 📌 Вопрос
- 💬 Пояснение простыми словами
- 🛠 Как работает
- 🧪 Пример с пояснением
- 💡 Полезно знать
🔹 Блок 1: JavaScript — основы. Вопросы 1–10 (подробно)
1. 📌 Какие типы данных существуют в JavaScript?
💬 JavaScript работает с разными видами данных — числа, строки, логические значения, и даже "null" и "undefined".
🛠 Примитивные типы:
- Number — любое число: 5, -10, 3.14
- String — текст: "Привет"
- Boolean — логическое значение: true, false
- null — намеренное отсутствие значения
- undefined — переменная существует, но без значения
- Symbol — уникальный идентификатор
- BigInt — числа, больше, чем позволяет обычный Number
Сложные (ссылочные) типы:
- Object, Array, Function
🧪 Пример:
let age = 25; // Number
let name = "Анна"; // String
let isOnline = true; // Boolean
let user = { name: "Ann" }; // Object
let list = [1, 2, 3]; // Array
let notSet = undefined;
let nothing = null;
💡 Все примитивы хранятся по значению, а объекты — по ссылке.
2. 📌 В чём разница между == и ===?
💬 В JavaScript есть два вида сравнения: обычное (==) и строгое (===). Они работают по-разному.
🛠
- == приводит типы перед сравнением (например, '5' == 5 → true)
- === не приводит типы — если типы разные, сразу false
🧪 Пример:
'5' == 5 // true — строка превращается в число
'5' === 5 // false — типы разные: string и number
💡 Рекомендуется всегда использовать ===, чтобы избежать неожиданных ошибок.
3. 📌 Какими способами можно объявить переменную?
💬 В JavaScript есть 3 ключевых слова для объявления переменной: var, let, const.
🛠
- var — старая форма, работает внутри функции и "всплывает".
- let — блочная область видимости, можно переназначить.
- const — блочная область видимости, нельзя переназначить.
🧪 Пример:
var x = 10;
let y = 20;
const z = 30;
💡 const защищает переменную от переназначения, но не делает объект или массив внутри неизменяемым:
const obj = { name: 'Ivan' };
obj.name = 'Petr'; // работает!
4. 📌 В чём разница между null и undefined?
💬 Это оба способа сказать "ничего нет", но с разным смыслом.
🛠
- undefined — переменной не присвоено значение
- null — значение установлено специально, чтобы сказать "ничего"
🧪 Пример:
let a;
console.log(a); // undefined
let b = null;
console.log(b); // null
💡 undefined появляется по умолчанию, null — вручную.
5. 📌 Для чего нужны map, filter, reduce, forEach?
💬 Эти методы используются для обработки массивов.
🛠
- forEach — перебор элементов, ничего не возвращает
- map — создает новый массив, изменяя каждый элемент
- filter — создает новый массив с элементами, которые прошли проверку
- reduce — собирает значение из массива в одно (например, сумму)
🧪 Пример:
const arr = [1, 2, 3];
arr.forEach(n => console.log(n)); // 1, 2, 3
arr.map(n => n * 2); // [2, 4, 6]
arr.filter(n => n > 1); // [2, 3]
arr.reduce((acc, n) => acc + n, 0); // 6
💡 reduce часто используют для задач вроде подсчёта, агрегации и построения объектов.
6. 📌 Что такое стрелочные функции и чем они отличаются?
💬 Это более короткая форма записи функций, но с особенностями.
🛠 Отличия:
- Не имеют собственного this и arguments
- Не используются как конструкторы
- Более лаконичны
🧪 Пример:
const add = (a, b) => a + b;
💡 Внутри стрелочной функции this берётся из внешнего контекста:
const obj = {
count: 10,
show: function() {
setTimeout(() => {
console.log(this.count); // 10
}, 1000);
}
}
obj.show();
7. 📌 Что такое замыкание (closure)?
💬 Это функция, которая "помнит" переменные из внешнего кода, даже если он уже завершён.
🛠
- Функция внутри другой функции
- Доступ к переменным внешней области
🧪 Пример:
function counter() {
let count = 0;
return function () {
count++;
return count;
}
}
const next = counter();
console.log(next()); // 1
console.log(next()); // 2
💡 Замыкания полезны для создания приватных переменных и инкапсуляции.
8. 📌 Что такое шаблонные литералы?
💬 Это строки с улучшенными возможностями: можно вставлять переменные и писать многострочный текст.
🛠 Обозначаются с помощью обратных кавычек (`)
🧪 Пример:
const name = 'Оля';
const greet = `Привет, ${name}!
Как дела?`;
console.log(greet);
💡 Работают как с переменными, так и с выражениями:
`Сумма: ${2 + 2}` // "Сумма: 4"
9. 📌 Что такое Set и Map?
💬 Это специальные структуры данных, похожие на массив и объект, но с улучшенными возможностями.
🛠
- Set — набор уникальных значений
- Map — коллекция пар ключ/значение (ключом может быть любой тип)
🧪 Пример:
const set = new Set([1, 2, 2, 3]);
console.log(set); // Set(3) {1, 2, 3}
const map = new Map();
map.set('name', 'Ann');
map.set(1, 'One');
console.log(map.get(1)); // 'One'
💡 В Map можно использовать объекты как ключи, в отличие от обычного объекта.
10. 📌 Как определить наличие свойства в объекте?
💬 Нужно понять: есть ли у объекта определённое свойство.
🛠 Способы:
- obj.hasOwnProperty('key') — только собственные свойства
- 'key' in obj — проверяет также прототип
🧪 Пример:
const user = { name: 'Игорь' };
'name' in user; // true
user.hasOwnProperty('name'); // true
💡 Если нужно проверить, есть ли внутреннее значение, используйте:
if (user.name !== undefined) { ... }
(исправлено по комментам 04.07.2025)
if (!user.name) { ... }