<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>welefen &#187; tonumber</title>
	<atom:link href="http://www.welefen.com/tag/tonumber/feed" rel="self" type="application/rss+xml" />
	<link>http://www.welefen.com</link>
	<description>风为人世在，在世人为风。</description>
	<lastBuildDate>Wed, 08 Sep 2010 01:26:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>javascript中toInt的几种方法</title>
		<link>http://www.welefen.com/javascript-toint-method.html</link>
		<comments>http://www.welefen.com/javascript-toint-method.html#comments</comments>
		<pubDate>Wed, 16 Dec 2009 08:20:26 +0000</pubDate>
		<dc:creator>welefen</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tonumber]]></category>

		<guid isPermaLink="false">http://www.welefen.com/?p=166</guid>
		<description><![CDATA[在javascript中，如果要将一个字符串转变成数字，一般是通过parseInt这个函数进行。但如果对输入串有很高确定性的话，其实可以用更简单的方法。如：只是将字符串“123”变成数字123。下面给出具体的说明。 parseInt函数 parseInt函数是专门用来处理将字符串变成整型的。具体请见：ECMA-262 P114。 支持八进制和十六进制，如：&#8217;0111&#8242;，&#8217;0&#215;111&#8242;。 支持非正数。如：&#8217;-111&#8242;。 支持数字后还有字符串，如：&#8217;111abc&#8217;。 支持第二个参数，是传递的转换进制，数值为2到36。如：parseInt(&#8217;111&#8242;,2)，即将111转换为二进制。 忽略前面的空白字符，如：\n，\t，\r。 如果无法将字符串转换为一个数值，则返回NaN。 一元操作符“+” 在javascript中，“+”号即可以作为二元操作符，又可以作为一元操作符。作为一元操作符的时候，就是将对象变成数值形式的。具体见：ECMA-262 P82。 其实执行+的时候，调用JS引擎的ToNumber函数。 true/false转成1/0。 null转成0。 支持非正数。 忽略前面的空白字符。 支持16进制，八进制会当十进制处理。 &#8220;111&#8243;转换成111，其他情况基本都是 NaN。 Number构造器 当number构造器当函数使用时，是将其他对象转化成数值。转换原理跟一元操作符&#8221;+&#8221;完全一样，因为都是调用JS引擎ToNumber函数。所以这个方式基本不用，因为使用它比使用“+”要多7个字符。 二进制操作符“&#124;” 使用二进制操作符“&#124;”结合0可以将对象转换成整形的。如&#8217;111&#8242;&#124;0。 true/false转换成1/0。 忽略前面的特殊字符。 支持16进制，八进制会当十进制处理。 null转成0。 支持非正数。 不能转换成整型的，则返回为0。如：&#8217;111abc&#8217;结果为0。 二进制操作符“&#62;&#62;” 使用二进制操作符“&#62;&#62;”结合0可以将对象转换成整形的。如&#8217;111&#8242;&#62;&#62;0。 true/false转换成1/0。 忽略前面的特殊字符。 支持16进制，八进制会当十进制处理。 null转成0。 支持非正数。 不能转换成整型的，则返回为0。如：&#8217;111abc&#8217;结果为0。 二进制操作符“&#62;&#62;&#62;” 使用二进制操作符“&#62;&#62;&#62;”结合0可以将对象转换成整形的。如&#8217;111&#8242;&#62;&#62;&#62;0。 true/false转换成1/0。 忽略前面的特殊字符。 支持16进制，八进制会当十进制处理。 null转成0。 非正数的时候则转换为2^32-概数的绝对值。如：&#8217;-111&#8242;&#62;&#62;&#62;0为4294967185。 不能转换成整型的，则返回为0。如：&#8217;111abc&#8217;结果为0。 测试结果 对于转换的对象数字加字符或者其他类型的，只能用parseInt转换。 对于一般的转化，如将“123”转化成123时，有如下的测试结果： parseInt + &#124; &#62;&#62; &#62;&#62;&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>在javascript中，如果要将一个字符串转变成数字，一般是通过parseInt这个函数进行。但如果对输入串有很高确定性的话，其实可以用更简单的方法。如：只是将字符串“123”变成数字123。下面给出具体的说明。</p>
<h2>parseInt函数</h2>
<p>parseInt函数是专门用来处理将字符串变成整型的。具体请见：ECMA-262 P114。</p>
<ol>
<li>支持八进制和十六进制，如：&#8217;0111&#8242;，&#8217;0&#215;111&#8242;。</li>
<li>支持非正数。如：&#8217;-111&#8242;。</li>
<li>支持数字后还有字符串，如：&#8217;111abc&#8217;。</li>
<li>支持第二个参数，是传递的转换进制，数值为2到36。如：parseInt(&#8217;111&#8242;,2)，即将111转换为二进制。</li>
<li>忽略前面的空白字符，如：\n，\t，\r。</li>
<li>如果无法将字符串转换为一个数值，则返回NaN。</li>
</ol>
<p><span id="more-166"></span></p>
<h2>一元操作符“+”</h2>
<p>在javascript中，“+”号即可以作为二元操作符，又可以作为一元操作符。作为一元操作符的时候，就是将对象变成数值形式的。具体见：ECMA-262 P82。</p>
<p>其实执行+的时候，调用JS引擎的ToNumber函数。</p>
<ol>
<li>true/false转成1/0。</li>
<li>null转成0。</li>
<li>支持非正数。</li>
<li>忽略前面的空白字符。</li>
<li>支持16进制，八进制会当十进制处理。</li>
<li>&#8220;111&#8243;转换成111，其他情况基本都是 NaN。</li>
</ol>
<h2>Number构造器</h2>
<p>当number构造器当函数使用时，是将其他对象转化成数值。转换原理跟一元操作符&#8221;+&#8221;完全一样，因为都是调用JS引擎ToNumber函数。所以这个方式基本不用，因为使用它比使用“+”要多7个字符。</p>
<h2>二进制操作符“|”</h2>
<p>使用二进制操作符“|”结合0可以将对象转换成整形的。如&#8217;111&#8242;|0。</p>
<ol>
<li>true/false转换成1/0。</li>
<li>忽略前面的特殊字符。</li>
<li>支持16进制，八进制会当十进制处理。</li>
<li>null转成0。</li>
<li>支持非正数。</li>
<li>不能转换成整型的，则返回为0。如：&#8217;111abc&#8217;结果为0。</li>
</ol>
<h2>二进制操作符“&gt;&gt;”</h2>
<p>使用二进制操作符“&gt;&gt;”结合0可以将对象转换成整形的。如&#8217;111&#8242;&gt;&gt;0。</p>
<ol>
<li>true/false转换成1/0。</li>
<li>忽略前面的特殊字符。</li>
<li>支持16进制，八进制会当十进制处理。</li>
<li>null转成0。</li>
<li>支持非正数。</li>
<li>不能转换成整型的，则返回为0。如：&#8217;111abc&#8217;结果为0。</li>
</ol>
<h2>二进制操作符“&gt;&gt;&gt;”</h2>
<p>使用二进制操作符“&gt;&gt;&gt;”结合0可以将对象转换成整形的。如&#8217;111&#8242;&gt;&gt;&gt;0。</p>
<ol>
<li>true/false转换成1/0。</li>
<li>忽略前面的特殊字符。</li>
<li>支持16进制，八进制会当十进制处理。</li>
<li>null转成0。</li>
<li>非正数的时候则转换为2^32-概数的绝对值。如：&#8217;-111&#8242;&gt;&gt;&gt;0为<span>4294967185</span>。</li>
<li>不能转换成整型的，则返回为0。如：&#8217;111abc&#8217;结果为0。</li>
</ol>
<h2>测试结果</h2>
<p>对于转换的对象数字加字符或者其他类型的，只能用parseInt转换。</p>
<p>对于一般的转化，如将“123”转化成123时，有如下的测试结果：</p>
<table border="1" width="100%">
<tbody>
<tr>
<td></td>
<td>parseInt</td>
<td>+</td>
<td>|</td>
<td>&gt;&gt;</td>
<td>&gt;&gt;&gt;</td>
</tr>
<tr>
<td>IE8(执行10^5次)</td>
<td>96ms</td>
<td>65ms</td>
<td>61ms</td>
<td>59ms</td>
<td>58ms</td>
</tr>
<tr>
<td>FF3.5(执行10^7次)</td>
<td>49ms</td>
<td>48ms</td>
<td>52ms</td>
<td>48ms</td>
<td>53ms</td>
</tr>
<tr>
<td>Safari4(执行10^5次)</td>
<td>38ms</td>
<td>15ms</td>
<td>15ms</td>
<td>15ms</td>
<td>16ms</td>
</tr>
<tr>
<td>Chrome(执行10^5次)</td>
<td>25ms</td>
<td>33ms</td>
<td>37ms</td>
<td>38ms</td>
<td>37ms</td>
</tr>
<tr>
<td>Opera10(执行10^5次)</td>
<td>113ms</td>
<td>61ms</td>
<td>63ms</td>
<td>63ms</td>
<td>66ms</td>
</tr>
</tbody>
</table>
<p>从上面可以看出，除了FF和Chrome下parseInt和其他的没什么差别，其他的使用parseInt函数都要比操作符慢。</p>
<p>所以有时候可以使用“|”操作符来完成字符到数值的转换工作，并且转换默认是0，而不是NaN。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.welefen.com/javascript-toint-method.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->