Skip to content

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

Built with VitePress and ❤️