Data Types
js
const name = "Сулак"; // string
const price = 1500; // number
const hasGuide = true; // boolean
const rating = null; // явное «ничего» (сами задали)
let reviews; // undefined — не задано вообще
const tour = { ... }; // object
const ids = [1, 2, 3]; // array (тоже object)Главное правило
Сравнивай ТОЛЬКО через === и !==. == приводит типы — ловушка: 0 == "" → true. Забудь, что существует.
js
5 === "5" // false — разные типы ✅
5 == "5" // true — неожиданно ❌Truthy / Falsy — что «ложно», а что «правдиво» (ВЫУЧИТЬ!)
В условиях JS приводит всё к boolean. Ложны ТОЛЬКО 6 значений:
js
false, 0, "" (пустая строка), null, undefined, NaN
// Всё остальное правдиво, даже:
"0" // true! непустая строка
[] // true! пустой массив — ОБМАНЧИВО
{} // true! пустой объект — ОБМАНЧИВО
"false" // true! строка непустаяКлассическая ловушка:
js
if (tours.length) { ... } // ✅ 0 элементов → falsy → не войдёт. Работает!
if (tours) { ... } // ⚠️ [] всегда truthy → войдёт ВСЕГДА. Баг!?? vs || — дай значение «по умолчанию»
js
const price = inputPrice || 1000; // || подставит default для ВСЕХ falsy
const price = inputPrice ?? 1000; // ?? подставит default ТОЛЬКО для null/undefined
// Разница критична с нулём и пустой строкой:
0 || 1000 // 1000 — ноль «сломался» ❌ (частый баг!)
0 ?? 1000 // 0 — ноль на месте ✅
"" || "anon" // "anon"
"" ?? "anon" // ""Правило: для чисел и строк используй ??, для boolean-флагов — ||.
Приведение типов (конвертация)
js
Number("2500") // 2500
Number("") // 0 ⚠️ пустая строка — НОЛЬ!
Number("abc") // NaN
parseInt("2500px") // 2500 — вытащил число из строки
+"2500" // 2500 — унарный плюс, сахар Number()
String(1500) // "1500"
(1500).toString() // "1500"
`${1500}` // "1500"
Boolean(0) // false
!!"abc" // true — двойное НЕ, быстрый способ «в boolean»NaN — ловушка новичка
js
NaN === NaN // false! NaN не равен ничему, даже себе
Number.isNaN(NaN) // true ← единственный надёжный способ проверить
isNaN("abc") // true, но isNaN("12") → false — он СНАЧАЛА конвертируетОбновлено: 01.10.2026