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


当前回答

parseInt转换为整数,也就是说,它去掉小数。数字不转换为整数。

其他回答

parseInt() ->解析一个数字到指定的redix。

Number()->如果转换失败,则将指定值转换为其等效数值或NaN。

因此,要将一些非数字值转换为数字,我们应该始终使用number()函数。

eg.

Number("")//0
parseInt("")//NaN

Number("123")//123
parseInt("123")//123

Number("123ac") //NaN,as it is a non numeric string
parsInt("123ac") //123,it parse decimal number outof string

Number(true)//1
parseInt(true) //NaN

parseInt()函数有各种各样的极端情况,因为它进行重定向转换,因此我们应该避免使用parseInt()函数进行强制转换。

现在,要检查所提供的值是否是Numeric,我们应该使用nativeisNaN()函数

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

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

获得结果的另一种方法是使用~操作符

在大多数情况下

~~someThing === parseInt(something)

但是~~对于parseInt接受的带尾字符的字符串或带基数规范的字符串(例如十六进制)将返回0,并且当parseInt返回NaN时也将返回0。另一个区别是~~如果给定一个bigint,则返回一个你可以添加另一个bigint的bigint,而parseInt如果bigint很大,则返回一个普通的浮点数(是的,它给出的值与parseFloat完全相同)

但是在大多数情况下~~比parseInt快30%。当浮点数表示为字符串时,它只会慢10%。

因此,如果~~的限制范围更适合你的需要,那么就节省使用电脑的时间,减少打字的时间

一个微小的区别是它们转换为undefined或null,

Number() Or Number(null) Or Number('') // returns 0

parseInt() Or parseInt(null) // returns NaN

我发现在几种将字符串转换为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