В чем разница между 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