12月16, 2009

javascript中toInt的几种方法

在javascript中,如果要将一个字符串转变成数字,一般是通过parseInt这个函数进行。但如果对输入串有很高确定性的话,其实可以用更简单的方法。如:只是将字符串“123”变成数字123。下面给出具体的说明。

parseInt函数

parseInt函数是专门用来处理将字符串变成整型的。具体请见:ECMA-262 P114。

  1. 支持八进制和十六进制,如:'0111','0x111'。
  2. 支持非正数。如:'-111'。
  3. 支持数字后还有字符串,如:'111abc'。
  4. 支持第二个参数,是传递的转换进制,数值为2到36。如:parseInt('111',2),即将111转换为二进制。
  5. 忽略前面的空白字符,如:\n,\t,\r。
  6. 如果无法将字符串转换为一个数值,则返回NaN。

一元操作符“+”

在javascript中,“+”号即可以作为二元操作符,又可以作为一元操作符。作为一元操作符的时候,就是将对象变成数值形式的。具体见:ECMA-262 P82。

其实执行+的时候,调用JS引擎的ToNumber函数。

  1. true/false转成1/0。
  2. null转成0。
  3. 支持非正数。
  4. 忽略前面的空白字符。
  5. 支持16进制,八进制会当十进制处理。
  6. "111"转换成111,其他情况基本都是 NaN。

Number构造器

当number构造器当函数使用时,是将其他对象转化成数值。转换原理跟一元操作符"+"完全一样,因为都是调用JS引擎ToNumber函数。所以这个方式基本不用,因为使用它比使用“+”要多7个字符。

二进制操作符“|”

使用二进制操作符“|”结合0可以将对象转换成整形的。如'111'|0。

  1. true/false转换成1/0。
  2. 忽略前面的特殊字符。
  3. 支持16进制,八进制会当十进制处理。
  4. null转成0。
  5. 支持非正数。
  6. 不能转换成整型的,则返回为0。如:'111abc'结果为0。

二进制操作符“>>”

使用二进制操作符“>>”结合0可以将对象转换成整形的。如'111'>>0。

  1. true/false转换成1/0。
  2. 忽略前面的特殊字符。
  3. 支持16进制,八进制会当十进制处理。
  4. null转成0。
  5. 支持非正数。
  6. 不能转换成整型的,则返回为0。如:'111abc'结果为0。

二进制操作符“>>>”

使用二进制操作符“>>>”结合0可以将对象转换成整形的。如'111'>>>0。

  1. true/false转换成1/0。
  2. 忽略前面的特殊字符。
  3. 支持16进制,八进制会当十进制处理。
  4. null转成0。
  5. 非正数的时候则转换为2^32-概数的绝对值。如:'-111'>>>0为4294967185
  6. 不能转换成整型的,则返回为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。

本文链接:http://welefen.com/post/javascript-toint-method.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。