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

Во-первых, давайте посмотрим на официальное определение:

parseInt() : функция parseInt() анализирует строковый аргумент и возвращает целое число по указанной системе счисления (основание в математических системах счисления). Второй параметр указывает, что система счисления, которую мы обычно используем, равна 10, а также может быть 8 или 16. Во избежание ошибок синтаксического анализа для строк, начинающихся с «0» и «0x», различные спецификации программирования JavaScript требуют, чтобы значение второй параметр должен быть указан явно, например, parseInt("123",10).

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

parseInt('16', 8)  = 14
parseInt('10', 8)  = 8

parseInt('16', 10)  = 16
parseInt('10', 10)  = 10

parseInt('16', 16)  = 22
parseInt('10', 16)  = 16

Number(): его можно использовать для преобразования типов без оператора new. Если его нельзя преобразовать в число, он вернет NaN, например «23aa».

Отличие: Следующие примеры могут ясно показать это.

// When the string is composed of numbers, they have no difference in the converted numbers. 
let numStr = '123'
console.log(parseInt(numStr))   //123
console.log(Number(numStr))        //123

// When the string is composed of letters.
let numStr = 'abc'
console.log(parseInt(numStr))   //NaN
console.log(Number(numStr))        //NaN

// When the string is composed of numbers and letters. 
let numStr = '123a'
console.log(parseInt(numStr))   //123
console.log(Number(numStr))        //NaN

// When the string is composed of zeros and numbers.
let numStr = '0123'
console.log(parseInt(numStr))   //123
console.log(Number(numStr))        //123

// **When the string contains a decimal point.**
let numStr = '123.456'
console.log(parseInt(numStr))        //123
console.log(Number(numStr))            //123.456// ** When the number starts with 123aa. **
let numStr = '123abc'
console.log(parseInt(numStr))        //123
console.log(Number(numStr))          //NaN
// **When the string is null.**
let numStr = null
console.log(parseInt(numStr))        //NaN
console.log(Number(numStr))            //0

// **When the string is ''(empty).**
let numStr = ''
console.log(parseInt(numStr))        //NaN
console.log(Number(numStr))            //0
  1. Когда строка состоит из чисел, нет никакой разницы в преобразованных числах; если строка не содержит цифр и состоит только из букв, оба метода возвращают только результат NaN; когда строка состоит из нулей и цифр, все они анализируют все числа, кроме 0;
  2. Когда строка состоит из цифр и букв, ① если буква находится в начале, оба метода возвращают только результат NaN; ② если буква не находится в начале, метод Number возвращает NaN, а метод parseInt возвращает данные перед буквой.
  3. Перед операцией parseInt необходимо преобразовать значения, отличные от типа String, в тип String.




Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.