JavaScript шпаргалка українською — основи
Все базове по JavaScript на одній сторінці: змінні, типи, оператори, умови, цикли, функції, об'єкти. Довідник для тих, хто щойно вчить JS, або щоб «швидко згадати» через місяць.
Якщо потрібен глибший розбір — починай з уроку про змінні. Шукаєш конкретно методи масивів — у нас є окрема шпаргалка по масивах (map, filter, reduce і компанія).
Змінні: let, const, var
let age = 25; // можна змінювати
const name = "Ivan"; // не можна перепризначити
var old = "не використовуй";
let | const | var | |
|---|---|---|---|
| Можна перепризначити | ✅ | ❌ | ✅ |
Block scope ({ }) | ✅ | ✅ | ❌ (function scope) |
| Hoisting | ✅ (TDZ) | ✅ (TDZ) | ✅ (як undefined) |
| Сучасний код | ✅ | ✅ | ❌ |
Правило 90/10: використовуй const за замовчуванням. Якщо побачив, що значення треба перепризначити — заміни на let. var не використовуй взагалі — це legacy з дев'яностих, і вона спричиняє несподівані баги через function scope і hoisting.
const для об'єктів і масивів не робить їх immutable. const arr = [1,2]; arr.push(3) працює, бо const забороняє лише перепризначення посилання, не зміну вмісту. Для повної незмінності — Object.freeze().
Типи даних
JavaScript має 7 примітивних типів і один не-примітив (object):
| Тип | Приклад | typeof |
|---|---|---|
string | "привіт", 'hi', `шаблон` | "string" |
number | 42, 3.14, -1, NaN, Infinity | "number" |
bigint | 9007199254740993n | "bigint" |
boolean | true, false | "boolean" |
null | null (свідома відсутність) | "object" ⚠️ |
undefined | змінна без значення | "undefined" |
symbol | Symbol("id") | "symbol" |
object | {}, [], функції | "object" / "function" |
typeof null === "object" — це історичний баг JavaScript з 1995 року, який ніколи не виправили заради зворотної сумісності.
Конвертація типів
String(42); // "42"
Number("3.14"); // 3.14
Boolean(0); // false
Boolean(""); // false
Boolean("0"); // true (!) — будь-який непорожній рядок = true
parseInt("12px"); // 12
parseFloat("3.14"); // 3.14
Шаблонні рядки (template literals)
const name = "Ivan";
const age = 25;
const greet = `Привіт, ${name}! Тобі ${age + 1} наступного року.`;
// "Привіт, Ivan! Тобі 26 наступного року."
Зворотні лапки + ${...} — заміна старому "Привіт, " + name + "!".
Оператори
Арифметичні
| Оператор | Приклад | Результат |
|---|---|---|
+ | 5 + 3 | 8 |
- | 5 - 3 | 2 |
* | 5 * 3 | 15 |
/ | 10 / 3 | 3.333... |
% | 10 % 3 | 1 (залишок) |
** | 2 ** 10 | 1024 (степінь) |
++ / -- | x++ | інкремент / декремент |
Порівняння
| Оператор | Що робить | Приклад |
|---|---|---|
=== | Строга рівність (тип + значення) | 5 === "5" → false |
!== | Строга нерівність | 5 !== "5" → true |
== | Нестрога (з коерцією типів) | 5 == "5" → true ⚠️ |
>, <, >=, <= | Більше / менше | 10 > 5 → true |
Завжди використовуй === і !==. == робить неявну конвертацію типів, що дає сюрпризи: 0 == "", null == undefined, [] == false — все true. У 99% випадків ти цього не хочеш.
Логічні
| Оператор | Назва | Приклад |
|---|---|---|
&& | AND | true && false → false |
|| | OR | false || "fallback" → "fallback" |
! | NOT | !true → false |
?? | Nullish coalescing | null ?? "default" → "default" |
?. | Optional chaining | user?.address?.city |
// Класичний хак з ||: значення за замовчуванням
const name = userName || "Гість";
// АЛЕ: 0 || "Гість" → "Гість" (бо 0 — falsy)
// Краще: ?? — тільки null/undefined вважає "порожнім"
const count = userCount ?? 0;
// 0 ?? "default" → 0 ✅
Тернарний оператор
const status = age >= 18 ? "дорослий" : "дитина";
Скорочена форма if/else — корисно для простих умов в одному рядку.
Truthy / Falsy
JavaScript ділить усі значення на «правдиві» (truthy) і «хибні» (falsy). У контексті if (...), falsy перетворюється на false.
Falsy значення (запам'ятай ці 7):
false
0 // (і -0, 0n)
"" // порожній рядок
null
undefined
NaN
Все інше — truthy. Включно з:
"0"(рядок з нулем)"false"(рядок зі словом false)[](порожній масив!){}(порожній об'єкт!)
Умови
if / else if / else
if (age < 13) {
console.log("дитина");
} else if (age < 18) {
console.log("підліток");
} else {
console.log("дорослий");
}
switch
switch (day) {
case "пн":
case "вт":
case "ср":
case "чт":
case "пт":
console.log("робочий день");
break;
case "сб":
case "нд":
console.log("вихідний");
break;
default:
console.log("невідомо");
}
break критично важливий — без нього виконання «провалюється» в наступний case.
Цикли
for
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
while / do...while
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
// do...while виконується мінімум один раз
do {
console.log("один раз точно");
} while (false);
for...of (по значеннях)
const fruits = ["яблуко", "груша", "слива"];
for (const fruit of fruits) {
console.log(fruit);
}
for...in (по ключах об'єкта)
const user = { name: "Ivan", age: 25 };
for (const key in user) {
console.log(key, user[key]);
}
Не використовуй for...in для масивів! Він обходить всі енумеровані властивості, включно з тими, що додані в prototype. Для масивів — for...of або forEach().
break / continue
for (let i = 0; i < 10; i++) {
if (i === 3) continue; // пропустити 3
if (i === 7) break; // зупинити цикл
console.log(i);
}
// 0, 1, 2, 4, 5, 6
Функції
Function declaration
function add(a, b) {
return a + b;
}
«Підіймається» (hoisting) — можна викликати ще до оголошення в коді.
Function expression
const add = function(a, b) {
return a + b;
};
Не підіймається — спочатку треба оголосити.
Arrow function
const add = (a, b) => a + b;
// З тілом і явним return
const add = (a, b) => {
const sum = a + b;
return sum;
};
// Один параметр — дужки не обов'язкові
const double = x => x * 2;
// Без параметрів
const greet = () => "Привіт!";
Arrow-функції не мають власного this — це робить їх ідеальними для колбеків у методах об'єктів і React-компонентах.
Параметри за замовчуванням
function greet(name = "Гість") {
return `Привіт, ${name}!`;
}
greet(); // "Привіт, Гість!"
greet("Ivan"); // "Привіт, Ivan!"
Rest параметри
function sum(...numbers) {
return numbers.reduce((acc, n) => acc + n, 0);
}
sum(1, 2, 3, 4, 5); // 15
Деструктуризація параметрів
function createUser({ name, age, email = "n/a" }) {
return `${name}, ${age}, ${email}`;
}
createUser({ name: "Ivan", age: 25 }); // "Ivan, 25, n/a"
Об'єкти
Створення і доступ
const user = {
name: "Ivan",
age: 25,
greet() {
return `Привіт, я ${this.name}`;
}
};
user.name; // "Ivan"
user["name"]; // те саме
user.greet(); // "Привіт, я Ivan"
Додавання / видалення
user.email = "ivan@example.com"; // додати
delete user.age; // видалити
"name" in user; // true — перевірка наявності
Деструктуризація
const { name, age } = user;
// name = "Ivan", age = 25
// З перейменуванням і дефолтом
const { name: userName, country = "UA" } = user;
Spread (розгортання)
const updated = { ...user, age: 26 }; // копія + перевизначене поле
const merged = { ...user, ...other }; // об'єднання двох об'єктів
Корисні методи
Object.keys(user); // ["name", "age", "greet"]
Object.values(user); // ["Ivan", 25, function]
Object.entries(user); // [["name", "Ivan"], ["age", 25], ...]
Object.assign({}, user, { age: 26 }); // те саме що spread
Масиви (коротко)
const fruits = ["яблуко", "груша", "слива"];
fruits.length; // 3
fruits[0]; // "яблуко"
fruits.push("вишня"); // додати в кінець
fruits.pop(); // видалити з кінця
fruits.includes("слива"); // true
Повний довідник з усіма методами (map, filter, reduce, find, sort, що мутує, що ні) — у шпаргалці по масивах.
Часті помилки початківців
==замість===— приводить до незрозумілих багів через коерцію типів. Завжди===.varзамістьlet/const—varмає дивний function scope і hoisting. Просто забудь про нього.- Зміна
const-об'єкта —const arr = [1,2]; arr.push(3)працює!constблокує тільки перепризначення посилання. typeof null === "object"—nullмає типobject. Перевіряй явно:value === null.thisв arrow-функціях — стрілочні функції не мають власногоthis. Якщо потрібенthisконтексту виклику — звичайнаfunction.- Hoisting змінних
var— оголошення підіймається наверх, а присвоєння — ні. Уlet/constця проблема вирішена через TDZ. - Порівняння об'єктів через
===—{a: 1} === {a: 1}→false. Об'єкти порівнюються за посиланням, не за вмістом. for...inна масивах — обходить prototype-властивості. Для масивів —for...ofабоforEach.
- JavaScript.info — українською — найкращий підручник JS, від основ до глибин
- MDN: JavaScript Guide — офіційна документація
- Eloquent JavaScript — безкоштовна книга-класика (англ., є переклади)
- JavaScript методи масивів — наша шпаргалка — детально про map, filter, reduce та інші
- JavaScript The Weird Parts — Will Sentance про дивацтва JS
- Чому
0.1 + 0.2 !== 0.3— окремий сайт про float-арифметику в JS (і не тільки)