JS об'єкт Number
Використання об'єкта
У JavaScript числа - це не просто арифметичні значення. Вони є екземплярами об'єкта Number
, що робить їх частиною більш загальної системи об'єктно-орієнтованого програмування у JavaScript. Ця об'єктна природа чисел відкриває перед розробниками ряд можливостей, але також має деякі нюанси, які важливо враховувати.
В JavaScript числа можуть бути представлені в різних форматах:
255; // десяткове представлення
0xff; // шістнадцяткове представлення
0b11111111; // двійкове представлення
0o377; // вісімкове представлення
0.255e3; // експоненціальне представлення
Усі ці формати представляють одне й те ж саме число - 255.
Типи чисел:
JavaScript, традиційно, має лише один числовий тип - Number
. Всі числа в JavaScript є 64-бітними числами з плаваючою комою подвійної точності, що відповідає стандарту IEEE 754. Це може призвести до деяких неочікуваних результатів, особливо при роботі з дуже великими або дуже маленькими числами.
Однак, з появою ES2020, в JavaScript було введено новий числовий тип - BigInt
. Це дозволяє представляти цілі числа будь-якої довжини без втрати точності.
let ordinaryNumber = 37; // `Number`
let bigIntNumber = 37n; // `BigInt`
Приведення типів в JavaScript
В JavaScript існує декілька способів приведення типів, особливо коли мова йде про приведення різних значень до числа. Функція Number()
є однією з найпростіших методів для цього, але розуміння її поведінки в різних ситуаціях є важливим.
Number("123"); // 123, рядок перетворюється на число
Number("unicorn"); // NaN, оскільки "unicorn" не є числом
Number(undefined); // NaN, оскільки `undefined` не має числового еквівалента
Number(true); // 1, бо логічне `true` відповідає числу 1
Внутрішнє кодування чисел:
JavaScript використовує формат подвійної точності IEEE 754 для представлення чисел. Цей формат складається з трьох компонентів: знаку (позитивний або негативний), експоненти (потужності двійки) та мантіси (фактичне значення числа). Це дає можливість представляти дуже маленькі або дуже великі числа, але з певними обмеженнями щодо точності.
Автоматичне приведення до числа:
JavaScript є мовою з динамічною типізацією, тому багато операцій автоматично приводять значення до певного типу, коли це необхідно. Це може викликати неочікувані результати, особливо якщо не розуміти, як працює приведення.
+true; // 1, бо логічне `true` приводиться до числа 1
+"123" - 0; // 123, рядок "123" приводиться до числа під час арифметичних операцій
+undefined; // NaN, оскільки `undefined` не має числового еквівалента
Існують і інші методи для приведення рядків до чисел, такі як Number.parseFloat()
та Number.parseInt()
, які мають свої нюанси та специфічне використання.
Конвертація значень до цілих чисел:
Часто існує потреба привести число з плаваючою комою до цілого. JavaScript пропонує декілька методів для цього, таких як Math.floor()
, який округлює число вниз, і Math.ceil()
, який округлює число вгору.
Math.floor(1.9); // 1, округлено вниз
Math.ceil(1.1); // 2, округлено вгору
Math.round(1.5); // 2, стандартне математичне округлення
Розуміння різних методів і способів приведення типів в JavaScript є ключовим для написання точного та надійного коду.
Нотатка: | JavaScript автоматично може привести рядки до чисел при виконанні математичних операцій. Однак це може призвести до непередбачуваних результатів. Наприклад, |
Нотатка: | Числа з плаваючою комою в JavaScript можуть не завжди давати очікувані результати через обмеження точності. Наприклад, |
Порада: | Якщо ви плануєте працювати з дуже великими числами, розгляньте можливість використання |
Порада: | Оскільки |
Синтаксис
let num = new Number(value);
let num = Number(value);
Переглядачі
Переглядач | |||||
---|---|---|---|---|---|
1 |
1 |
1 |
3 |
12 |
Переглядач | ||||
---|---|---|---|---|
4.4 |
18 |
4 |
1 |
Переглядач | ||
---|---|---|
0.10.0 |
1.0 |
Приклади
Метод toFixed
дозволяє вам заокруглити число з плаваючою комою до заданої кількості знаків після коми. У цьому прикладі ми використовуємо toFixed(0)
для заокруглення до найближчого цілого числа. Зверніть увагу, що toFixed
повертає рядок, тому ми використовуємо Number()
для перетворення результату назад у число.
const floatNumber = 12.7;
const roundedNumber = Number(floatNumber.toFixed(0));
console.log(roundedNumber); // 13
У цьому прикладі ми спробували конвертувати рядок "apple" в число, але, зрозуміло, що слово "apple" не можна перетворити на число, тому Number(valueA)
повертає NaN
. Для рядка "5" конвертація в числовий тип проходить успішно. Функція isNaN
дозволяє перевірити, чи є значення "не числом".
const valueA = "apple";
const valueB = "5";
console.log(isNaN(Number(valueA))); // true
console.log(isNaN(Number(valueB))); // false
Number.MAX_SAFE_INTEGER
вказує на найбільше ціле число, яке можна безпечно представити в JavaScript. Якщо ми спробуємо додати до цього числа значення, що перевищує 1, результат може бути неточним. У цьому прикладі ми бачимо, що додавання 2 до Number.MAX_SAFE_INTEGER
призводить до неточності.
const maxSafe = Number.MAX_SAFE_INTEGER;
const beyondMaxSafe = maxSafe + 2;
console.log(maxSafe); // 9007199254740991
console.log(beyondMaxSafe === maxSafe + 2); // false