一尘不染

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

javascript

将字符串转换为数字时parseInt()Number()行为如何不同?


阅读 470

收藏
2020-04-25

共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在字符串上检测到前导零,它将以八进制为基础来解析数字,这在标准的新版本ECMAScript
5中已更改,但是要花很长时间才能进入浏览器实现((与ECMAScript3不兼容),也parseInt将忽略与当前使用的基数的任何数字都不对应的结尾字符。

Number构造函数不检测八进制:

Number("010");         // 10
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
2020-04-25