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

将string转换为数字时, parseInt()Number()行为有何不同?

那么,它们在语义上是不同的 , 作为函数调用的Number构造函数执行types转换parseInt执行parsing ,例如:

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

请记住,如果parseInt在string中检测到前导零,它将以八进制为基础parsing数字,这已经在标准的新版本ECMAScript 5上进行了更改,但是在浏览器实现中需要很长时间它与ECMAScript 3不兼容), parseInt也会忽略与当前使用的base的任何数字不一致的结尾字符。

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

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

但它可以用hex符号来处理数字,就像parseInt一样:

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

此外,一个广泛使用的构造函数是一元+运算符(第72页) ,它等效于使用Number构造函数作为函数:

 +"2e1"; // 20 +"0xF"; // 15 +"010"; // 10 
 typeof parseInt("123") => number typeof Number("123") => number typeof new Number("123") => object (Number primitive wrapper object) 

前两个将会给你更好的性能,因为它返回一个原语而不是一个对象。

如果你正在寻找性能,那么你可能会得到最好的结果,按位右移"10">>0 。 也乘以( "10" * 1 )或不乘( ~~"10" )。 他们都是更快的NumberparseInt 。 他们甚至有“function”返回0为非数字参数。 这里是性能testing 。

我总是使用parseInt,但要小心强制它进入八进制模式。

我发现两个性能比较链接的几个方法之间的string转换为int

 parseInt(str,10) parseFloat(str) str << 0 +str str*1 str-0 Number(str) 

http://jsben.ch/#/zGJHM

http://phrogz.net/js/string_to_number.html

parseInt将转换为一个整数,也就是说,它将小数点分开。 数字不会转换为整数。