javascript:parseInt()、Number()和+对比

看书时看到Number()和+转换数字速度要比parseInt()快的多,所以闲来无事我就试了试。

1.parseInt()

parseInt()函数将给定的字符串以指定的基数解析为整数。
parseInt(string,radix)
第二个参数表示使用的进制,我们一般使用10进制,也可能会有到8或者16进制。为了避免对“0”和“0x”开头的字符串解析错误,各种javascript编程规范都规定必须要明确给出第二个参数的值,如parseInt(“123”,10).
parseInt从头解析string为整数,在遇到不能解析的字符时就返回已近解析的整数部分,如果第一个字符就不能解析,就直接返回NaN。

2.Number()

Number()在不用new操作符时,可以用来执行类型转换。如果无法转换为数字,就返回NaN。
像“123a”,parseInt()返回是123,Number()返回是NaN。

3.+

+操作符可以将字符串转化为数字,如+”123”返回是123.
和Number()一样,+”123a”返回是NaN;

开始测试:
我在jsfiddle上写了几行代码,反正也是测,我就把parseFloat()也加进来了。
上代码:

var i=0;
var l=10000000;
var numStr="123";
var startTime;
var endTime;
startTime=(new Date()).getTime();
for(i=0;i<l;i++){
    //parseInt(numStr,10);
    //parseFloat(numStr);
    //Number(numStr);
    //+numStr;
}
endTime=(new Date()).getTime();
console.log(endTime-startTime);

对于最简单得字符串“123”:
parseInt()——–131
parseFloat()—–94
Number()——-216
+———————-472
竟然是parseFloat()最快!

对于莫名其妙加了个0的字符串“0123”:
parseInt()——–1001
parseFloat()—–1024
Number()——-542
+———————-923
这回是Number()最快了。

既然把parseFloat加进来了,那就试一个小数“12.3”:
parseInt()——–977
parseFloat()—–1211
Number()——-1422
+———————-1873
parseInt()最快,估计是因为它最早放弃。

然后弄个不是数的,“123a”:
parseInt()——–1047
parseFloat()—–1016
Number()——-1153
+———————-1538
parseInt()和parseFloat()比较快。

最后再测一个比较复杂的得了,“012.3a”:
parseInt()——–927
parseFloat()—–1295
Number()——-1271
+———————-1604
还是最早放弃的parseInt()最快。

额,结果和书上写的有点出入啊,凑合着吧。
我用的几年前的联想笔记本,搜狗高速浏览器在jsfiddle里面跑的代码。

ps:+号实在太讨厌了,一会让人家变成数字,一会让人家变成字符串。。。

你可能感兴趣的:(JavaScript)