Примитивные типы данных
В переменных можно хранить разные виды данных: числа, текст, логические значения и многое другое. JavaScript умеет работать с семью примитивными типами — разберём каждый по очереди и узнаем, когда что применять.
🧩 Что такое тип данных?
Не все данные одинаковы. Число 42 — это одно, текст «Привет, мир!» — другое, а значение «истина/ложь» — третье. Компьютеру важно знать, с чем именно он работает, потому что операции над числами — это одно (можно складывать, умножать), а над текстом — совсем другое (можно соединять, обрезать, искать).
Тип данных определяет, что именно хранится в переменной и какие операции с этим можно делать. JavaScript автоматически определяет тип — вам не нужно его явно указывать (в отличие от Java или C++).
В JavaScript есть 7 примитивных типов и один сложный тип (object). Примитивы — это базовые «атомарные» значения, которые нельзя разбить на части.
📝 String — строка
String — это текст. Любой текст: имя пользователя, сообщение в чате, URL страницы, ответ сервера. Строки заключаются в кавычки (одинарные, двойные или обратные).
let name = "Алиса"; // двойные кавычки
let city = 'Москва'; // одинарные кавычки
let greeting = `Привет, мир!`; // обратные кавычки (шаблонные строки)
let emptyStr = ""; // пустая строка — тоже строка!
let longText = "Это очень длинное предложение, которое может занимать несколько строк.";
console.log(typeof name); // "string"
console.log(name.length); // 5 (количество символов)
💡 Строки используются везде: имена, email-адреса, пароли (хешированные!), тексты сообщений, HTML-код, SQL-запросы, JSON-данные — всё это строки.
🔢 Number — число
Number — это числа. В JavaScript нет разделения на «целые» и «дробные» числа — все числа одного типа. Под капотом JavaScript хранит все числа как 64-битные числа с плавающей точкой (IEEE 754).
let age = 25; // целое число
let price = 99.99; // дробное число
let temperature = -15; // отрицательное число
let big = 1_000_000; // можно использовать _ для читаемости
console.log(typeof age); // "number"
console.log(typeof price); // "number" — оба числа одного типа!
Особые числовые значения:
let infinity = Infinity; // бесконечность (например, 1 / 0)
let negInfinity = -Infinity; // минус бесконечность
let notANumber = NaN; // Not a Number — результат некорректной операции
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity
console.log("abc" * 2); // NaN — нельзя умножить текст на число
console.log(typeof NaN); // "number" — да, NaN имеет тип number, вот такой парадокс!
✅ Boolean — булево значение
Boolean — это логический тип: всего два возможных значения — true (истина) и false (ложь). Без булевых значений невозможно написать ни одну полезную программу — они нужны везде, где есть выбор или условие.
let isLoggedIn = true; // пользователь вошёл в систему
let isPremium = false; // пользователь не подписчик
let hasAccess = true; // есть доступ к материалу
let isEmailVerified = false; // email не подтверждён
console.log(typeof isLoggedIn); // "boolean"
// Булевы значения появляются при сравнениях:
let age = 18;
console.log(age >= 18); // true
console.log(age === 21); // false
💡 Boolean — основа логики программ. Каждый раз, когда вы пишете if, вы проверяете булево значение. Авторизован ли пользователь? Достаточно ли денег на счёте? Нажата ли кнопка? — всё это boolean.
🚫 null — намеренная пустота
null — специальное значение, означающее «намеренно пусто», «значения нет». Это не ошибка — это сознательное решение программиста сказать: «здесь пусто, я это знаю».
let selectedUser = null; // пользователь ещё не выбран
let currentVideo = null; // видео ещё не загружено
let errorMessage = null; // ошибок нет
// Позже можно присвоить реальное значение:
selectedUser = { name: "Иван", age: 25 };
// Интересный факт — маленький исторический баг JavaScript:
console.log(typeof null); // "object" — это ОШИБКА в JS, оставленная для совместимости!
// null — не объект, но typeof возвращает "object"
⚠️ typeof null === "object" — это известный исторический баг JavaScript, который не исправляют из-за обратной совместимости. Помните об этом: null — это примитив, не объект, несмотря на то что говорит typeof.
❓ undefined — значение не задано
undefined означает «значение не было задано». Это то, что JavaScript ставит автоматически, если значение не было присвоено. В отличие от null, это не намеренное «пусто» — это «ещё не задано» или «не существует».
let x; // объявлена, но не инициализирована
console.log(x); // undefined
function greet(name) {
console.log(name); // если не передать аргумент — будет undefined
}
greet(); // undefined
const user = { name: "Иван" };
console.log(user.email); // undefined — свойство не существует
console.log(typeof undefined); // "undefined"
console.log(typeof x); // "undefined"
Намеренная пустота. Программист сам поставил null, говоря: «тут пусто, я это знаю». Типичный пример: пользователь ещё не выбрал категорию — selectedCategory = null.
Значение не было задано. JavaScript сам ставит undefined, когда переменная есть, но значения у неё нет. Типичный пример: переменная объявлена, но не инициализирована.
🔮 Symbol и BigInt — для продвинутых
Ещё два примитива — они редко встречаются у новичков, но важно знать об их существовании.
Уникальный идентификатор. Каждый Symbol гарантированно уникален — даже два Symbol с одинаковым описанием не равны друг другу. Используется для создания уникальных ключей объектов.
const id1 = Symbol("id");
const id2 = Symbol("id");
console.log(id1 === id2); // false!
Целые числа произвольной точности. Обычный Number имеет ограничение (~53 бита). BigInt нужен для работы с очень большими числами — криптография, финансы. Записывается с суффиксом n.
const big = 9007199254740993n;
console.log(typeof big); // "bigint"
🔍 Оператор typeof
typeof — это оператор, который возвращает тип значения в виде строки. Очень полезен при отладке — когда непонятно, что именно хранится в переменной.
console.log(typeof "Привет"); // "string"
console.log(typeof 42); // "number"
console.log(typeof 3.14); // "number"
console.log(typeof true); // "boolean"
console.log(typeof false); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" ← исторический баг!
console.log(typeof Symbol()); // "symbol"
console.log(typeof 100n); // "bigint"
console.log(typeof { name: "X" }); // "object"
console.log(typeof function(){}); // "function"
💡 Запомните: typeof null === "object" — это баг в языке, исправить который невозможно (сломаются миллиарды сайтов). Если нужно проверить, что значение — именно null, используйте строгое сравнение: value === null.
✅ Итоги урока
- string — текст. В кавычках: одинарных, двойных или обратных
- number — числа (целые и дробные в одном типе). Плюс Infinity и NaN
- boolean — истина (true) или ложь (false). Основа логики программ
- null — намеренная пустота, поставленная программистом
- undefined — значение не задано (JavaScript ставит автоматически)
- symbol — уникальный идентификатор (для продвинутых)
- bigint — очень большие целые числа (для продвинутых)
typeofпозволяет узнать тип значения. Исключение:typeof null === "object"— баг- null — намеренная пустота. undefined — значение не было задано
В следующем уроке детально разберём строки — один из самых часто используемых типов данных. 🚀
Тест: Примитивные типы данных
7 вопросов