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/”