Рубрики
Без рубрики

Как преобразовать строку в число в JavaScript

Узнайте, как преобразовать строку в число с помощью JavaScript

JavaScript предоставляет различные способы преобразования строкового значения в число.

Лучше всего: используйте объект Number

Лучшим, на мой взгляд, является использование объекта Number в контексте, не связанном с конструктором (без ключевого слова new ):

const count = Number('1234') //1234

Это также касается десятичных знаков.

Число – это объект-оболочка , который может выполнять множество операций. Если мы используем конструктор ( новый номер ("1234") ), он возвращает объект номера США вместо числового значения, поэтому обратите внимание.

Следите за разделителями между цифрами:

Number('10,000') //NaN
Number('10.00') //10
Number('10000') //10000

В случае, если вам нужно проанализировать строку с десятичными разделителями, используйте Intl. Формат чисел вместо этого.

Другие решения

Используйте parseInt() и parseFloat()

Другим хорошим решением для целых чисел является вызов функции parseInt() :

const count = parseInt('1234', 10) //1234

Не забывайте о втором параметре, который является основанием, всегда 10 для десятичных чисел, иначе преобразование может попытаться угадать основание и дать неожиданные результаты.

parseInt() пытается получить число из строки, которая содержит не только число:

parseInt('10 lions', 10) //10

но если строка не начинается с числа, вы получите NaN (Не число):

parseInt("I'm 10", 10) //NaN

Кроме того, так же, как и номер, он ненадежен с разделителями между цифрами:

parseInt('10,000', 10) //10     ❌
parseInt('10.00', 10) //10     ✅ (considered decimals, cut)
parseInt('10.000', 10) //10     ✅ (considered decimals, cut)
parseInt('10.20', 10) //10     ✅ (considered decimals, cut)
parseInt('10.81', 10) //10     ✅ (considered decimals, cut)
parseInt('10000', 10) //10000  ✅

Если вы хотите сохранить десятичную часть, а не просто получить целочисленную часть, используйте parseFloat() . Обратите внимание, что в отличие от его parseInt() брата, он принимает только один аргумент – строку для преобразования:

parseFloat('10,000')  //10     ❌
parseFloat('10.00')   //10     ✅ (considered decimals, cut)
parseFloat('10.000')  //10     ✅ (considered decimals, cut)
parseFloat('10.20')   //10.2   ✅ (considered decimals)
parseFloat('10.81')   //10.81  ✅ (considered decimals)
parseFloat('10000')   //10000  ✅

Использовать +

Один “трюк” заключается в использовании унарного оператора + перед строкой:

+'10,000'  //NaN ✅
+'10.000'  //10 ✅
+'10.00' //10 ✅
+'10.20'  //10.2 ✅
+'10.81'  //10.81 ✅
+'10000' //10000 ✅

Посмотрите, как он возвращает NaN в первом примере, что является правильным поведением: это не число.

Используйте математику.пол()

Аналогично унарному оператору + , но возвращает целочисленную часть, следует использовать Математический этаж() :

Math.floor('10,000') //NaN ✅
Math.floor('10.000') //10 ✅
Math.floor('10.00') //10 ✅
Math.floor('10.20') //10 ✅
Math.floor('10.81') //10 ✅
Math.floor('10000') //10000 ✅

Использовать *1

Как правило, один из самых быстрых вариантов, ведет себя как унарный оператор + , поэтому он не выполняет преобразование в целое число, если число является плавающим.

'10,000' * 1 //NaN ✅
'10.000' * 1 //10 ✅
'10.00' * 1 //10 ✅
'10.20' * 1 //10.2 ✅
'10.81' * 1 //10.81 ✅
'10000' * 1 //10000 ✅

Представление

Каждый из этих методов имеет разную производительность в разных средах, так как все зависит от реализации. В моем случае, * 1 является ли победитель с точки зрения производительности в 10 раз быстрее, чем другие альтернативы.

Используйте JSPerf , чтобы попробовать себя:

Оригинал: “https://flaviocopes.com/how-to-convert-string-to-number-javascript/”