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

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

Ответ 1

parseInt("123hui")

возвращает 123

Number("123hui")

возвращает NaN

Другими словами, parseInt() анализирует до первой цифры и возвращает все, что было проанализировано. Number() хочет преобразовать всю строку в число, которое также может быть поплавком BTW.


РЕДАКТИРОВАТЬ № 1: Лусеро прокомментировал радикс, который можно использовать вместе с parseInt(). Что касается этого, см. Ответ DOCTOR ниже (я не собираюсь копировать это здесь, документ должен иметь справедливую долю славы..).


РЕДАКТИРОВАНИЕ № 2: Что касается вариантов использования: это уже несколько написано между строками. Используйте Number() в случаях, когда вы косвенно хотите проверить, действительно ли данная строка представляет числовое значение, float или integer. parseInt()/parseFloat() не так строги, поскольку они просто анализируют и останавливаются, когда числовое значение останавливается (radix!), что делает его полезным, когда вам нужно числовое значение спереди "в случае его наличия" (обратите внимание, что parseInt("hui") также возвращает NaN). И самое большое различие заключается в использовании radix, который Number() не знает, а parseInt() может косвенно предполагать из данной строки (что иногда может вызвать странные результаты).

Ответ 2

Первый принимает два параметра:

parseInt(string, radix)

Параметр radix используется для указания, какая система цифр используется, например, для 16-ти шестнадцатеричных чисел, указывает, что число в строке должно анализироваться от шестнадцатеричного числа до десятичного числа.

Если параметр radix опущен, JavaScript предполагает следующее:

  • Если строка начинается с "0x", radix - 16 (шестнадцатеричный)
  • Если строка начинается с "0", Радикс 8 (восьмеричный). Эта функция
    устарел
  • Если строка начинается с любого другого значение, радиус равен 10 (десятичный)

Другая указанная вами функция принимает только один параметр:

Number(object)

Функция Number() преобразует аргумент объекта в число, которое представляет значение объекта.

Если значение не может быть преобразовано в юридический номер, возвращается NaN.

Ответ 3

parseInt (строка) преобразует строку, содержащую нечисловые символы, в число, если строка начинается с числовых символов

'10px' => 10

Число (строка) возвращает NaN, если строка содержит любые нечисловые символы

'10px' => NaN

Ответ 4

Функция parseInt позволяет вам указать основание для входной строки и ограничивается целочисленными значениями.

parseInt('Z', 36) === 35

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

Ответ 5

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

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

var foo = "3"; console.log(ParseInt (Foo));//3 console.log(номер (Foo));//3

Это не совсем правильно. Поскольку sjngm написал parseInt, он обрабатывает строку до первого числа. Это правда. Но проблема заключается в том, когда вы хотите разделить число, разделенное пробелом, т.е. "12 345". В этом случае
parseInt("12 345") вернет 12 вместо 12345. Поэтому, чтобы избежать этой ситуации, вы должны обрезать пробелы перед разбором на число. Мое решение было бы:

     var number=parseInt("12 345".replace(/\s+/g, ''),10);

Обратите внимание на одну дополнительную вещь, которую я использовал в функции parseInt(). parseInt("string",10) установит число в десятичный формат. Если вы будете разбирать строку типа "08", вы получите 0, потому что 8 не восьмеричное число.Explanation здесь

Ответ 6

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

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

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