2009-12
16
在javascript中,如果要将一个字符串转变成数字,一般是通过parseInt这个函数进行。但如果对输入串有很高确定性的话,其实可以用更简单的方法。如:只是将字符串“123”变成数字123。下面给出具体的说明。
parseInt函数
parseInt函数是专门用来处理将字符串变成整型的。具体请见:ECMA-262 P114。
- 支持八进制和十六进制,如:’0111′,’0×111′。
- 支持非正数。如:’-111′。
- 支持数字后还有字符串,如:’111abc’。
- 支持第二个参数,是传递的转换进制,数值为2到36。如:parseInt(’111′,2),即将111转换为二进制。
- 忽略前面的空白字符,如:\n,\t,\r。
- 如果无法将字符串转换为一个数值,则返回NaN。
一元操作符“+”
在javascript中,“+”号即可以作为二元操作符,又可以作为一元操作符。作为一元操作符的时候,就是将对象变成数值形式的。具体见:ECMA-262 P82。
其实执行+的时候,调用JS引擎的ToNumber函数。
- true/false转成1/0。
- null转成0。
- 支持非正数。
- 忽略前面的空白字符。
- 支持16进制,八进制会当十进制处理。
- “111″转换成111,其他情况基本都是 NaN。
Number构造器
当number构造器当函数使用时,是将其他对象转化成数值。转换原理跟一元操作符”+”完全一样,因为都是调用JS引擎ToNumber函数。所以这个方式基本不用,因为使用它比使用“+”要多7个字符。
二进制操作符“|”
使用二进制操作符“|”结合0可以将对象转换成整形的。如’111′|0。
- true/false转换成1/0。
- 忽略前面的特殊字符。
- 支持16进制,八进制会当十进制处理。
- null转成0。
- 支持非正数。
- 不能转换成整型的,则返回为0。如:’111abc’结果为0。
二进制操作符“>>”
使用二进制操作符“>>”结合0可以将对象转换成整形的。如’111′>>0。
- true/false转换成1/0。
- 忽略前面的特殊字符。
- 支持16进制,八进制会当十进制处理。
- null转成0。
- 支持非正数。
- 不能转换成整型的,则返回为0。如:’111abc’结果为0。
二进制操作符“>>>”
使用二进制操作符“>>>”结合0可以将对象转换成整形的。如’111′>>>0。
- true/false转换成1/0。
- 忽略前面的特殊字符。
- 支持16进制,八进制会当十进制处理。
- null转成0。
- 非正数的时候则转换为2^32-概数的绝对值。如:’-111′>>>0为4294967185。
- 不能转换成整型的,则返回为0。如:’111abc’结果为0。
测试结果
对于转换的对象数字加字符或者其他类型的,只能用parseInt转换。
对于一般的转化,如将“123”转化成123时,有如下的测试结果:
| parseInt | + | | | >> | >>> | |
| IE8(执行10^5次) | 96ms | 65ms | 61ms | 59ms | 58ms |
| FF3.5(执行10^7次) | 49ms | 48ms | 52ms | 48ms | 53ms |
| Safari4(执行10^5次) | 38ms | 15ms | 15ms | 15ms | 16ms |
| Chrome(执行10^5次) | 25ms | 33ms | 37ms | 38ms | 37ms |
| Opera10(执行10^5次) | 113ms | 61ms | 63ms | 63ms | 66ms |
从上面可以看出,除了FF和Chrome下parseInt和其他的没什么差别,其他的使用parseInt函数都要比操作符慢。
所以有时候可以使用“|”操作符来完成字符到数值的转换工作,并且转换默认是0,而不是NaN。
还没有任何评论。