将字符串转换为数字时parseInt(),Number()行为如何不同?
parseInt()
Number()
嗯,它们在语义上是不同的,Number称为函数的构造函数执行类型转换并parseInt执行 解析 ,例如:
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