parseInt() 和 Number() 之间有什么区别?

2022-08-29 23:17:26

在将字符串转换为数字时,parseInt()Number() 的行为有何不同?


答案 1

好吧,它们在语义上是不同的作为函数调用的Number构造函数执行类型转换parseInt执行解析,例如:

// parsing:
parseInt("20px");       // 20
parseInt("10100", 2);   // 20
parseInt("2e1");        // 2

// type conversion
Number("20px");       // NaN
Number("2e1");        // 20, exponential notation

还将忽略与当前使用的基数的任何数字不对应的尾随字符。parseInt

构造函数不检测隐式八进制数,但可以检测显式八进制表示法:Number

Number("010");         // 10
Number("0o10")         // 8, explicit octal

parseInt("010");       // 8, implicit octal
parseInt("010", 10);   // 10, decimal radix used

它可以处理十六进制表示法的数字,就像:parseInt

Number("0xF");   // 15
parseInt("0xF"); //15

此外,一个广泛使用的用于执行数值类型转换的构造是一元 +运算符 (p. 72),它等效于使用构造函数作为函数:Number

+"2e1";   // 20
+"0xF";   // 15
+"010";   // 10

答案 2
typeof parseInt("123") => number
typeof Number("123") => number
typeof new Number("123") => object (Number primitive wrapper object)

前两个将为您提供更好的性能,因为它返回基元而不是对象。