К практике
НачальныйJavaScriptчислаNumber
🔢JuniorJavaScriptчислаNumberNaNMathparseInt
Числа
Тип number, NaN, Infinity, точность float, parseInt/parseFloat, объект Math.
JSЧисла в JavaScript
В JS нет отдельных типов int и float — все числа один тип number
number— целые и дробные, один тип
let age = 25; let price = 3.14; let huge = 1e9; // 1_000_000_000
Специальные значения
Infinity1 / 0больше любого числа-Infinity-1 / 0меньше любого числаNaN"abc" * 2Not a Number, тип — numberMAX_SAFE_INTEGER= 9007199254740991 (2⁵³ − 1)// Выше этого числа — потеря точности console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991 console.log(9007199254740992 === 9007199254740993); // true!
bigint— огромные целые числа, суффикс
nconst big = 9999999999999999999n; const sum = big + 1n; // обязательно n у обоих // big + 1 ← ошибка! нельзя смешивать
Язык примеров:
Шаг 1 из 2
1
Тип number
Один тип для всех чисел
В JavaScript нет отдельных типов для целых и дробных чисел — только один тип number:
javascript
let score = 42; // целое
let price = 9.99; // дробное
let temp = -5; // отрицательное
let big = 1000000; // большое числоСпециальные числовые значения
JavaScript имеет три особых значения для нестандартных ситуаций:
javascript
Infinity // бесконечность — получается при делении на ноль
-Infinity // минус бесконечность
NaN // "Not a Number" — результат некорректной математики
// Когда они появляются:
1 / 0 // Infinity (деление числа на ноль)
-1 / 0 // -Infinity
0 / 0 // NaN
"abc" * 2 // NaN (нельзя умножить строку на число)Важное свойство NaN — он не равен даже самому себе:
javascript
NaN === NaN // false (!)
NaN == NaN // false
// Правильная проверка на NaN:
Number.isNaN(NaN) // true
Number.isNaN(42) // false
Number.isNaN("abc") // false (строка — не NaN)Точность дробных чисел
javascript
0.1 + 0.2 // 0.30000000000000004 — НЕ 0.3!
0.1 + 0.2 === 0.3 // false (!)
// Причина: компьютер хранит числа в двоичном виде,
// и 0.1 не может быть записано точно (как 1/3 в десятичных).
// Решения:
+(0.1 + 0.2).toFixed(2) // "0.30" → округление
Math.round((0.1 + 0.2) * 100) / 100 // 0.3 через целые
// Для денег — всегда работай в копейках (целые числа):
const price = 1099; // 10.99₽ в копейках
const tax = 110; // 1.10₽ в копейках
const total = price + tax; // 1209 → "12.09₽"JavaScript
// Преобразование в число
// Number() — строгое преобразование
Number("42") // 42
Number("3.14") // 3.14
Number("") // 0
Number(" 42 ") // 42 (пробелы игнорируются)
Number("42px") // NaN — непарсируемое
Number(true) // 1
Number(false) // 0
Number(null) // 0
Number(undefined) // NaN
// parseInt() — читает до первого нечислового символа
parseInt("42px") // 42
parseInt("3.7") // 3 (целая часть)
parseInt("0xFF", 16) // 255 (16-ричное)
parseInt("abc") // NaN
// parseFloat() — то же но с дробной частью
parseFloat("3.14em") // 3.14
parseFloat("3.14.15") // 3.14 (остановится на втором .)
// + оператор — краткий, но осторожно
+"42" // 42
+"3.14" // 3.14
+"" // 0
+"abc" // NaN