В чем разница между parseInt(string) и Number(string) в JavaScript? [дубликат]
этот вопрос уже есть ответ здесь:
в чем разница между parseInt(string)
и Number(string)
в JavaScript?
6 ответов:
parseInt("123hui")
возвращает 123
Number("123hui")
возвращает
NaN
другими словами
parseInt()
парсит до первой не-цифры и возвращает все, что было разобрано.Number()
хочет преобразовать всю строку в число, которое также может быть float BTW.
EDIT #1: Lucero прокомментировал радикс, который можно использовать вместе с
parseInt()
. Что касается этого, пожалуйста, смотрите ответ доктора ниже (я не буду копировать что здесь док получит справедливую долю славы...).
EDIT #2: Что касается вариантов использования: это уже несколько написано между строк. Используйте
Number()
в тех случаях, когда вы косвенно хотите проверить, если данная строка полностью представляет собой числовое значение, float или целое число.parseInt()/parseFloat()
не так строго, как они просто разбирают и останавливаются, когда числовое значение останавливается (radix!), что делает его полезным при необходимости числовое значение на фронте "в случае" (Примечание этоparseInt("hui")
возвращаетNaN
). И самая большая разница заключается в использовании radix, чтоNumber()
не знаюparseInt()
может косвенно догадаться из данной строки (что иногда может привести к странным результатам).
первый принимает два параметра:
parseInt(string, radix)
параметр radix используется для указания того, какая система счисления должна использоваться, например, число 16 (шестнадцатеричное) указывает, что число в строке должно быть проанализировано от шестнадцатеричного числа до десятичного числа.
если параметр radix опущен, JavaScript предполагает следующее:
- если строка начинается с "0x", то
основание равно 16 (шестнадцатиричное)- если строка начинается с "0" , основание 8 (восьмеричной). Эта функция
является устаревшим- если строка начинается с любого другого значение, основание 10 (десятичное)
другая функция, которую вы упомянули, принимает только один параметр:
Number(object)
функция Number () преобразует аргумент объекта в число, представляющее значение объекта.
Если значение не может быть преобразовано в юридическое число, возвращается NaN.
parseInt (string) преобразует строку, содержащую нечисловые символы в число, если строка начинается с числовых символов
'10px' => 10
число(строка) возвращает NaN, если строка содержит нецифровые символы
'10px' => NaN
The
parseInt
функция позволяет указать различные радиусы для входной строки и ограничивается целочисленными значениями.parseInt('Z', 36) === 35
The
Number
конструктор, вызываемый как функция, будет анализировать строку с грамматикой и ограничен базой 10 и базой 16.StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt StrWhiteSpaceChar ::: WhiteSpace LineTerminator StrNumericLiteral ::: StrDecimalLiteral HexIntegerLiteral StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity DecimalDigits . DecimalDigitsopt ExponentPartopt. DecimalDigits ExponentPartopt DecimalDigits ExponentPartopt DecimalDigits ::: DecimalDigit DecimalDigits DecimalDigit DecimalDigit ::: one of 0 1 2 3 4 5 6 7 8 9 ExponentPart ::: ExponentIndicator SignedInteger ExponentIndicator ::: one of e E SignedInteger ::: DecimalDigits + DecimalDigits - DecimalDigits HexIntegerLiteral ::: 0x HexDigit 0X HexDigit HexIntegerLiteral HexDigit HexDigit ::: one of 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
добавление к ответу @sjngm:
они оба также игнорируют пробелы:
var foo = "3"; консоль.log (parseInt (foo)); / / 3 приставка.log (номер (foo)); / / 3
это не совсем правильно. Как sjngm написал parseInt анализирует строку на первое число. Это правда. Но проблема в том, когда вы хотите разобрать число, разделенное пробелами ie. "12 345". В таком случае
parseInt("12 345")
вернутся12
вместо12345
. Поэтому, чтобы избежать этой ситуации, вы должны обрезать пробелы перед разбором на число. Мое решение было бы:var number=parseInt("12 345".replace(/\s+/g, ''),10);
обратите внимание на одну дополнительную вещь, которую я использовал в функции parseInt ().
parseInt("string",10)
будет установить число в десятичном формате. Если бы вы разбирали строку типа "08", вы бы получили 0, потому что 8-это не восьмеричное число.Объяснение есть здесь