StudyCode
К практике
Начальный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, тип — number
MAX_SAFE_INTEGER= 9007199254740991 (2⁵³ − 1)
// Выше этого числа — потеря точности
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(9007199254740992 === 9007199254740993); // true!
bigint— огромные целые числа, суффикс n
const 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