Типы данных
Зачем это нужно
Значения бывают разных типов: текст, числа, «да/нет». От типа зависит, что с значением можно
делать. 5 + 5 — это 10, а "5" + "5" — это "55". Данные из форм, файлов и интернета почти
всегда приходят строками, и их нужно уметь превращать в числа — иначе калькулятор начнёт склеивать
цифры вместо сложения.
Основные типы
| Тип | Примеры | Что это |
|---|---|---|
string |
"Аня", '42', `привет` |
строка, текст |
number |
42, 3.14, -7 |
число (целое и дробное — один тип) |
boolean |
true, false |
логическое «да / нет» |
undefined |
undefined |
«значения ещё нет» |
null |
null |
«значения нет специально» |
Есть ещё bigint и symbol — они нужны редко. А массивы и объекты мы разберём позже.
Узнать тип: typeof
console.log(typeof "привет");
console.log(typeof 42);
console.log(typeof true);
console.log(typeof undefined);
Вывод:
string
number
boolean
undefined
Странность языка: typeof null выдаёт "object". Это старая ошибка, которую уже не исправить.
undefined и null
Если создать переменную и ничего в неё не положить, там будет undefined:
let answer;
console.log(answer);
Вывод:
undefined
null ставят сами, когда хотят сказать «тут пусто»: let winner = null; — победителя пока нет.
Шаблонные строки
Строку в обратных кавычках ` называют шаблонной. Внутрь неё можно подставить значение
через ${...}:
const name = "Аня";
const age = 15;
console.log(`Меня зовут ${name}, мне ${age} лет`);
console.log(`Через год будет ${age + 1}`);
Вывод:
Меня зовут Аня, мне 15 лет
Через год будет 16
Внутри ${} можно писать любое выражение. Это удобнее, чем склеивать куски через +.
Преобразование типов
В число:
console.log(Number("42")); // 42
console.log(Number("3.5")); // 3.5
console.log(Number("")); // 0
console.log(Number("12px")); // NaN
console.log(parseInt("12px")); // 12
console.log(parseFloat("1.5kg")); // 1.5
NaN (Not a Number, «не число») — особое числовое значение: результат неудачного превращения.
Проверяют его функцией Number.isNaN(x). Обычное сравнение не работает: NaN === NaN — это false!
Number требует, чтобы вся строка была числом. parseInt и parseFloat читают цифры с начала строки
и останавливаются на первом лишнем символе.
В строку: String(42) → "42", или `${42}`.
В логическое: Boolean(x). Значения, которые превращаются в false, называют «ложными»:
0, "" (пустая строка), null, undefined, NaN, false. Всё остальное — true,
даже строка "0" и строка "false".
Автоматическое преобразование
JavaScript иногда сам меняет типы — и это источник сюрпризов:
console.log("5" + 2); // 52 — плюс со строкой склеивает
console.log("5" - 2); // 3 — минус строку превращает в число
console.log("5" * "2"); // 10
console.log(true + 1); // 2 — true становится 1
Вывод:
52
3
10
2
Правило: если у + хоть с одной стороны строка — будет склейка. Поэтому данные из форм лучше
явно превращать в числа через Number(...).
Как это работает внутри
Каждое значение в памяти хранится вместе с меткой своего типа. Когда ты пишешь a + b, движок
сначала смотрит на типы: два числа — складывает, есть строка — превращает вторую часть в строку
и склеивает. Типы не привязаны к переменной: в одну и ту же let можно положить сначала число,
а потом строку. Такой язык называют динамически типизированным.
Частые ошибки
- Склейка вместо сложения.
"10" + 5→"105". Исправление:Number("10") + 5. Numberот строки с буквами.Number("12px")→NaN. НуженparseInt("12px").- Сравнение с
NaN.x === NaNвсегдаfalse. ИспользуйNumber.isNaN(x). - Обычные кавычки вместо обратных.
"Привет, ${name}"выведет текст как есть, с долларом и скобками. Подстановка работает только в`…`. - Строка
"false"считается истинной.Boolean("false")→true, потому что строка не пустая.
Шпаргалка
| Что | Как | Результат |
|---|---|---|
| Узнать тип | typeof x |
"string", "number"… |
| Строка → число | Number("42") |
42 |
| Число с начала строки | parseInt("12px") |
12 |
| Дробное с начала строки | parseFloat("1.5kg") |
1.5 |
| Проверка на NaN | Number.isNaN(x) |
true / false |
| Число → строка | String(42) |
"42" |
| Подстановка | `Итого: ${sum}` |
"Итого: 12" |
| Ложные значения | 0 "" null undefined NaN false |
всё остальное — истина |