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
Методи
isFinite()
- Перевіряє, чи є значення скінченним числом.
valueOf()
- Повертає примітивне числове значення об'єкта Number.
isSafeInteger()
- Визначає, чи є число безпечним цілим числом в межах діапазону точного представлення у JavaScript.
toExponential()
- Перетворює число в рядок у експоненціальному представленні.
parseFloat()
- Перетворює рядок на десяткове число з плаваючою комою.
toFixed()
- Форматує число, використовуючи фіксовану кількість знаків після десяткової коми.
toString()
- Перетворює число в його текстове представлення.
parseInt()
- Перетворює рядок у ціле число.
toLocaleString()
- Конвертує число в рядок з урахуванням локальних особливостей форматування.
toPrecision()
- Визначає формат числа, використовуючи вказану кількість знаків.
isNaN()
- Перевіряє, чи є значення "не числом" (NaN).
isInteger()
- Перевіряє, чи є значення цілим числом.
Властивості
MIN_VALUE
- Визначає найменше позитивне число, яке можна представити в JavaScript, ближче до нуля, ніж будь-яке інше число.
POSITIVE_INFINITY
- Представляє числове значення, яке більше за будь-яке інше можливе числове значення.
NaN
- Позначає "Not-a-Number" значення, що вказує на результат неправильної або недопустимої математичної операції.
prototype
- Прототип, що містить методи та властивості, спільні для всіх об'єктів типу Number.
NEGATIVE_INFINITY
- Представляє значення, що є меншим за будь-яке інше число.
EPSILON
- Представляє найменше різницю між двома числами, яку JavaScript вважає відмінною від нуля.
MIN_SAFE_INTEGER
- Визначає найменше безпечне ціле число, яке можна точно представити в JavaScript.
MAX_SAFE_INTEGER
- Визначає найбільше безпечне ціле число, яке може бути коректно представлене в JavaScript.
MAX_VALUE
- Визначає найбільше позитивне число, яке можна представити в JavaScript.