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`
автор: Bond

Приведення типів в 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 є ключовим для написання точного та надійного коду.

автор: Bond

Порада

Оскільки NaN не дорівнює самому собі, завжди використовуйте функцію isNaN() для перевірки на NaN.

автор: Bond
Порада

Якщо ви плануєте працювати з дуже великими числами, розгляньте можливість використання BigInt замість звичайного Number.

автор: Bond
Нотатка

JavaScript автоматично може привести рядки до чисел при виконанні математичних операцій. Однак це може призвести до непередбачуваних результатів. Наприклад, "5" + 3 дасть вам рядок "53", а "5" - 3 дасть число 2.

автор: Bond
Нотатка

Числа з плаваючою комою в JavaScript можуть не завжди давати очікувані результати через обмеження точності. Наприклад, 0.1 + 0.2 !== 0.3. Коли ви здійснюєте обчислення, особливо важливі з фінансової точки зору, враховуйте цю особливість.

автор: Bond

Синтаксис

let num = new Number(value);
let num = Number(value);

методи

Метод Опис
isFinite Перевіряє, чи є значення скінченним числом.
isInteger Перевіряє, чи є значення цілим числом.
isNaN Перевіряє, чи є значення "не числом" (NaN).
isSafeInteger Визначає, чи є число безпечним цілим числом в межах діапазону точного представлення у JavaScript.
parseFloat Перетворює рядок на десяткове число з плаваючою комою.
parseInt Перетворює рядок у ціле число.
toExponential Перетворює число в рядок у експоненціальному представленні.
toFixed Форматує число, використовуючи фіксовану кількість знаків після десяткової коми.
toLocaleString Конвертує число в рядок з урахуванням локальних особливостей форматування.
toPrecision Визначає формат числа, використовуючи вказану кількість знаків.
toString Перетворює число в його текстове представлення.
valueOf Повертає примітивне числове значення об'єкта Number.

властивості

Властивість Опис
EPSILON
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER Визначає найменше безпечне ціле число, яке можна точно представити в JavaScript.
MAX_VALUE Визначає найбільше позитивне число, яке можна представити в JavaScript.
MIN_VALUE Визначає найменше позитивне число, яке можна представити в JavaScript, ближче до нуля, ніж будь-яке інше число.
NaN Позначає "Not-a-Number" значення, що вказує на результат неправильної або недопустимої математичної операції.
NEGATIVE_INFINITY Представляє значення, що є меншим за будь-яке інше число.
POSITIVE_INFINITY Представляє числове значення, яке більше за будь-яке інше можливе числове значення.
prototype Прототип, що містить методи та властивості, спільні для всіх об'єктів типу Number.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 1 1 3 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми спробували конвертувати рядок "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
автор: Bond

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
автор: Bond

Метод toFixed дозволяє вам заокруглити число з плаваючою комою до заданої кількості знаків після коми. У цьому прикладі ми використовуємо toFixed(0) для заокруглення до найближчого цілого числа. Зверніть увагу, що toFixed повертає рядок, тому ми використовуємо Number() для перетворення результату назад у число.

const floatNumber = 12.7;
const roundedNumber = Number(floatNumber.toFixed(0));

console.log(roundedNumber); // 13
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід