У JavaScript є два різні види чисел: числа та «bigint».
Числа використовуються найчастіше: вони представляють числовий тип даних у форматі 64-бітного числа з плаваючою комою подвійної точності.
number: числовий тип даних у форматі 64-бітного числа з плаваючою комою подвійної точності (IEEE 754).
Приклади: -6, -2.4, 0, 0.1, 1, 3.14, 16.984025, 25, 976, 1024.0 і 500000.bigint: числовий тип даних, який може представляти цілі числа у форматі довільної точності.
Приклади: -12n, 0n, 4n і 9007199254740991n.let numericValue = 42;
// => 42
Літерал числа, як-от 42, у коді JavaScript - значення з плаваючою комою, а не ціле число.
Окремого типу для цілих чисел у повсякденному вжитку немає.
Тип bigint не створений для того, щоб замінити тип number у повсякденному використанні.
42 усе ще належить до Number, а не до BigInt.
Числа також можна записати в таких літеральних формах, як 0b101, 0o13, 0x0A. Докладніше про числову лексичну граматику тут.
E-запис позначає число, яке слід помножити на 10 у заданому степені.
Формат E-запису такий: число, потім e або E, а далі степінь десяти, на який множимо.
const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".
E-запис також дає змогу подати дуже малі числа:
const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.
Підкреслення допомагають зробити великі числа зручнішими для читання. Компілятор повністю ігнорує ці підкреслення.
const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000
Є два вбудовані обʼєкти, які стають у пригоді під час роботи з числами:
Number: статичні властивості для поширених і корисних значень, статичні методи для перевірки типів і перетворення типів, методи примірника для перетворення типів і форматування чисел як рядків тексту (англ. string).Math: властивості та методи для математичних констант і функцій, не працює з BigInt.Math також містить методи для округлення чисел.
Докладніше про доступні варіанти округлення можна прочитати в статті javascript.info про округлення.
Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235
Вбудований глобальний object Number також є глобальною function, яку можна використати, щоб перетворити майже будь-що схоже на число в number.
Він менш поблажливий, ніж розбір string у number.
const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);
unix;
// => 819199440000
У JavaScript є три види максимальних (а також мінімальних і максимальних відʼємних) значень для чисел:
VALUE: задаються через Number.MAX_VALUE і Number.MIN_VALUE
INFINITY: задаються через Number.POSITIVE_INFINITY і Number.NEGATIVE_INFINITY
SAFE_INTEGER: задаються через Number.MAX_SAFE_INTEGER і Number.MIN_SAFE_INTEGER
Через те, як реалізовано числа в JavaScript, не кожне число між Number.MIN_VALUE і Number.MAX_VALUE можна подати.
Однак кожне число між Number.MIN_SAFE_INTEGER - 1 і Number.MAX_SAFE_INTEGER + 1 можна подати.
У JavaScript є кілька спеціальних числових значень:
NaN і Infinity.+0 і -0.Значення-помилка NaN (також відоме як «не число») виникає в таких випадках.
Number('123'); // => 123
Number('Hello, World!'); // => NaN
Math.sqrt(-64); // => NaN
NaN + 69; // => NaN
NaN - єдине значення, яке не дорівнює саме собі:
NaN === NaN; // => false
Щоб перевірити, чи значення є NaN, потрібно скористатися глобальною функцією isNaN():
isNaN(NaN); // => true
isNaN(123); // => false
Infinity - значення-помилка, яке вказує на одну з двох проблем:
Math.pow(2, 1024); // => Infinity
6 / 0; // => Infinity
-6 / 0; // => -Infinity
Infinity більше за будь-яке інше число (крім NaN).
Так само -Infinity менше за будь-яке інше число (крім NaN)
Глобальна функція isFinite() дає змогу перевірити, чи значення є справжнім числом (ні нескінченним, ні NaN):
isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false
+0 і -0 - різні числа в JavaScript. Вони можуть виникнути, якщо ми представили число настільки мале, що його не відрізнити від 0.
Знаковий нуль дає змогу зафіксувати, «з якого боку» ми наближалися до нуля, тобто який знак мало число, перш ніж його почали вважати нулем.
Найкраща практика - вдавати, ніби нуль лише один.
Числа вважаються рівними, якщо вони мають однакове значення.
1 == 1.0;
// => true
1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.
1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.
Докладніше про порівняння загалом і про порівняння числових значень у JavaScript можна прочитати в концепції порівняння.
Числа в JavaScript мають формат з плаваючою комою, тому вся математика з цими значеннями відбувається з плаваючою комою. Тому в JavaScript:
0.1 + 0.2 === 0.3;
// => false
Коротке пояснення є на сайті 0.30000000000000004.com, а докладне - у Додатку D з «Numerical Computation Guide» від Oracle під назвою «What Every Computer Scientist Should Know About Floating-Point Arithmetic».