В чем разница между parseInt(string) и Number(string) в JavaScript? [дубликат]


этот вопрос уже есть ответ здесь:

в чем разница между parseInt(string) и Number(string) в JavaScript?

6 185

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-это не восьмеричное число.Объяснение есть здесь

добавление к ответу @sjngm:

они оба также игнорируют пробелы:

var foo = "    3     ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3