parseInt()
Функція parseInt()
(розібрати ціле число) розбирає рядковий аргумент і повертає ціле число за вказаною основою системи числення.
Спробуйте його в дії
Синтаксис
parseInt(string)
parseInt(string, radix)
Параметри
string
(рядок)Рядок, що починається з цілого числа. Пробіли на початку цього аргументу ігноруються.
radix
(основа системи числення) Необов'язковеЦіле число між
2
та36
, що представляє основу системи численняstring
. Воно перетворюється на 32-бітове ціле; якщо після перетворення воно ненульове і лежить поза діапазоном [2, 36], то функція повернеNaN
. Якщо дорівнює0
або не задане, то основа буде виведена на основі значенняstring
. Будьте уважні: усталеним значенням не завжди є10
! Опис нижче більш детально пояснює, що відбувається, коли не наданоradix
.
Повернене значення
Ціле число, розібране з наданого рядка, або NaN
, коли
radix
як 32-бітове число менше за2
чи більше за36
, або- перший непробільний символ не може бути перетворений на число.
Примітка: JavaScript не розрізняє "числа з рухомою комою" та "цілі числа" на рівні мови.
parseInt()
іparseFloat()
відрізняються лише в логіці розбору, але не обов'язково повертають різні значення. Наприклад,parseInt("42")
таparseFloat("42")
повернуть одне й те ж значення –Number
42.
Опис
Функція parseInt
перетворює свій перший аргумент на рядок, розбирає цей рядок, а потім повертає ціле число або NaN
.
Якщо не NaN
, то повернене значення буде цілим числом, що є першим аргументом, взятим як число за заданою основою числення. (Наприклад, основа числення 10
розбирає десяткові числа, 8
– вісімкові, 16
– шістнадцяткові, і так далі.)
Аргумент radix
перетворюється на число. Якщо він не наданий, або якщо його значенням стає 0, NaN
чи Infinity
(undefined
зводиться до NaN
), то JavaScript робить наступні припущення:
- Якщо вихідне значення
string
, не рахуючи пробілів та можливих знаків+
і-
на початку, починається з0x
чи0X
(нуля, після якого стоїть X у нижньому чи верхньому регістрі), тоradix
приймається за16
, і решта рядка розбирається як шістнадцяткове число. - Якщо вихідне значення
string
починається з будь-якого іншого значення, основа приймається за10
(десяткова система).
Примітка: Інші префікси, наприклад,
0b
, що є дійсними в числових літералах, обробляютьсяparseInt()
як звичайні цифри. ФункціяparseInt()
також не обробляє рядки, що починаються з символу0
як вісімкові значення. Єдиний префікс, котрий бере до увагиparseInt()
, –0x
чи0X
для шістнадцяткових значень; все решта за відсутностіradix
розбирається як десяткове значення. Щоб розбирати такі префікси, можна скористатисяNumber()
абоBigInt()
.
Якщо основа числення – 16
, то parseInt()
дозволяє (хоча не вимагає), аби рядок починався з 0x
чи 0X
після необов'язкового символу знаку (+
або -
).
Якщо значення основи (за потреби приведене) не лежить в діапазоні [2, 36] (включно), то parseInt
повертає NaN
.
Для основ, більших за 10
, цифрами після 9
є літери англійського алфавіту. Наприклад, для шістнадцяткових чисел (основа 16
) використовуються літери від A
до F
. Регістр літер ролі не грає.
Функція parseInt
розуміє виключно два знаки: +
для додатних чисел і -
для від'ємних. Розбір знаку виконується як перший крок після усування пробілів. Якщо знаків не знайдено, то алгоритм переходить до наступного кроку; інакше – прибирає знаки та виконує розбір числа в решті рядка.
Якщо parseInt
зустрічає символ, що не є цифрою за заданою основою radix
, вона ігнорує його та всі символи після нього та повертає ціле число, розібране до цього. Наприклад, хоч рядок 1e3
технічно кодує ціле число (і буде коректно розібраний parseFloat()
як ціле число 1000
), parseInt("1e3", 10)
поверне 1
, тому що e
не є дійсною цифрою при основі числення 10. Через те, що .
також не є цифрою, повернене значення завжди буде цілим числом.
Якщо перший символ не може бути перетворений на число у використовуваній системі числення, то parseInt
повертає NaN
. Пробіли на початку рядка – дозволені.
Для арифметичних потреб значення NaN
не вважається числом жодної системи числення. Щоб визначити, чи є результатом parseInt
NaN
, можна викликати функцію Number.isNaN
. Якщо NaN
передати до арифметичних операцій, то результатом операції також буде NaN
.
Через те, що великі числа використовують символ e
у своєму рядковому представленні (наприклад, 6.022E23
для 6.022 × 1023), використання parseInt
для обрізання чисел продукуватиме неочікувані результати при використанні на дуже великих чи дуже малих числах. parseInt
не слід використовувати як заміну Math.trunc()
.
Щоб перетворити число на його рядковий літерал у певній системі числення, слід використовувати thatNumber.toString(radix)
.
Через те, що parseInt()
повертає число, це число може постраждати від утрати точності, якщо представлене рядком число лежить поза безпечним діапазоном. Функція BigInt()
підтримує точний розбір цілих чисел довільної довжини, повертаючи BigInt
.
Приклади
Застосування parseInt()
Усі наступні приклади повернуть 15
:
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt("015", 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
Усі наступні приклади повернуть NaN
:
parseInt("Hello", 8); // Узагалі не число
parseInt("546", 2); // Цифри, що відмінні від 0 і 1, недійсні у двійковій системі
Усі наступні приклади повернуть -15
:
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt("-17", 8);
parseInt("-15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
Наступний приклад повертає 224
:
parseInt("0e0", 16);
Функція parseInt()
не обробляє значень BigInt
. Вона зупиняється на символі n
, розглядаючи символи перед ним як звичайне ціле число, можливо, зі втратою точності.
parseInt("900719925474099267n");
// 900719925474099300
Натомість слід передати рядок у функцію BigInt()
, без символу n
у кінці.
BigInt("900719925474099267");
// 900719925474099267n
Функція parseInt
не працює з розділювачами розрядів:
parseInt("123_456"); // 123
Застосування parseInt() до нерядкових значень
Функція parseInt()
може давати цікаві результати, коли опрацьовує нерядкові значення у поєднанні з високим значенням основи числення; наприклад, 36
(що робить усі абетково-цифрові символи дійсними цифрами).
parseInt(null, 36); // 1112745: Рядок "null" – це 1112745 за основою 36
parseInt(undefined, 36); // 86464843759093: Рядок "undefined" – це 86464843759093 за основою 36
У загальному випадку, використовувати parseInt()
до нерядкових значень – погана ідея, особливо як заміну для Math.trunc()
. Це може працювати на малих числах:
parseInt(15.99, 10); // 15
parseInt(-15.1, 10); // -15
Проте вийшло так, що це працює, лише через те, що рядкове представлення цих чисел використовує базовий дробовий запис ("15.99"
, "-15.1"
), в якому parseInt()
зупиняється на десятковому розділювачі. Числа, більші чи рівні 1e+21, або менші чи рівні 1e-7, використовують у своєму рядковому представленні експоненційний запис ("1.5e+22"
, "1.51e-8"
), і parseInt()
зупиниться на символі e
чи десятковому роздільнику, котрий завжди стоїть після першої цифри. А отже – для великих та малих чисел parseInt()
поверне одноцифрове ціле число:
parseInt(4.7 * 1e22, 10); // Дуже велике число стає 4
parseInt(0.00000000000434, 10); // Дуже мале число стає 4
parseInt(0.0000001, 10); // 1
parseInt(0.000000123, 10); // 1
parseInt(1e-7, 10); // 1
parseInt(1000000000000000000000, 10); // 1
parseInt(123000000000000000000000, 10); // 1
parseInt(1e21, 10); // 1
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
parseInt
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
Parses leading-zero strings as decimal, not octal
|
Chrome Full support 23 | Edge Full support 12 | Firefox Full support 21 | Internet Explorer Full support 9 | Opera Full support 15 | Safari Full support 6 | WebView Android Full support 4.4 | Chrome Android Full support 25 | Firefox for Android Full support 21 | Opera Android Full support 14 | Safari on iOS Full support 6 | Samsung Internet Full support 1.5 | Deno Full support 1.0 | Node.js Full support 0.10.0 |