<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: JavaScript类型检测小结（下）</title>
	<atom:link href="http://lifesinger.org/blog/2009/02/javascript-type-check-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/</link>
	<description>关注用户体验、前端开发，记录生活点滴、岁月足迹。</description>
	<lastBuildDate>Fri, 30 Jul 2010 02:05:51 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>By: 青菜</title>
		<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/comment-page-1/#comment-597</link>
		<dc:creator>青菜</dc:creator>
		<pubDate>Tue, 12 May 2009 17:37:55 +0000</pubDate>
		<guid isPermaLink="false">http://lifesinger.org/blog/?p=1130#comment-597</guid>
		<description>刚好在找这方面的文章，看了你写的文章后所有的问题就全解决了，也偷偷的把这篇文章收藏到了我的博客上了。
不过我在测试的时候发现用parseInt处理后的NaN还是当成number类型的。我现在在用JAVASCRIPT做ASP的，所以对数据检测要求比较高，我就加了判断NaN的代码进去，请你帮我看下我这样修改对不对？
function type(o){
  if (typeof o.length == &#039;number&#039;){
    if (o.callee) return &#039;arguments&#039;;
    else if (o.item) return &#039;collection&#039;;
  }
  var _toS = Object.prototype.toString,
  _types = {
      &#039;undefined&#039;         : &#039;undefined&#039;,
      &#039;number&#039;            : &#039;number&#039;,
      &#039;boolean&#039;           : &#039;boolean&#039;,
      &#039;string&#039;            : &#039;string&#039;,
      &#039;[object Function]&#039; : &#039;function&#039;,
      &#039;[object RegExp]&#039;   : &#039;regexp&#039;,
      &#039;[object Array]&#039;    : &#039;array&#039;,
      &#039;[object Date]&#039;     : &#039;date&#039;,
      &#039;[object Error]&#039;    : &#039;error&#039;
  };
  var _S=&#095;types[typeof o] &#124;&#124; _types[&#095;toS.call(o)] &#124;&#124; (o ? &#039;object&#039; : &#039;null&#039;);
  return (typeof o==&#039;number&#039;&amp;&amp;isNaN(o)?&#039;nan&#039;:&#095;S);
}</description>
		<content:encoded><![CDATA[<p>刚好在找这方面的文章，看了你写的文章后所有的问题就全解决了，也偷偷的把这篇文章收藏到了我的博客上了。<br />
不过我在测试的时候发现用parseInt处理后的NaN还是当成number类型的。我现在在用JAVASCRIPT做ASP的，所以对数据检测要求比较高，我就加了判断NaN的代码进去，请你帮我看下我这样修改对不对？<br />
function type(o){<br />
  if (typeof o.length == &#8216;number&#8217;){<br />
    if (o.callee) return &#8216;arguments&#8217;;<br />
    else if (o.item) return &#8216;collection&#8217;;<br />
  }<br />
  var _toS = Object.prototype.toString,<br />
  _types = {<br />
      &#8216;undefined&#8217;         : &#8216;undefined&#8217;,<br />
      &#8216;number&#8217;            : &#8216;number&#8217;,<br />
      &#8216;boolean&#8217;           : &#8216;boolean&#8217;,<br />
      &#8216;string&#8217;            : &#8216;string&#8217;,<br />
      &#8216;[object Function]&#8216; : &#8216;function&#8217;,<br />
      &#8216;[object RegExp]&#8216;   : &#8216;regexp&#8217;,<br />
      &#8216;[object Array]&#8216;    : &#8216;array&#8217;,<br />
      &#8216;[object Date]&#8216;     : &#8216;date&#8217;,<br />
      &#8216;[object Error]&#8216;    : &#8216;error&#8217;<br />
  };<br />
  var _S=&#95;types[typeof o] || _types[&#95;toS.call(o)] || (o ? &#8216;object&#8217; : &#8216;null&#8217;);<br />
  return (typeof o==&#8217;number&#8217;&amp;&amp;isNaN(o)?&#8217;nan&#8217;:&#95;S);<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jlake</title>
		<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/comment-page-1/#comment-596</link>
		<dc:creator>jlake</dc:creator>
		<pubDate>Thu, 02 Apr 2009 02:58:21 +0000</pubDate>
		<guid isPermaLink="false">http://lifesinger.org/blog/?p=1130#comment-596</guid>
		<description>测试了一下，o + ” 不行。
打扰了。</description>
		<content:encoded><![CDATA[<p>测试了一下，o + ” 不行。<br />
打扰了。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jlake</title>
		<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/comment-page-1/#comment-595</link>
		<dc:creator>jlake</dc:creator>
		<pubDate>Thu, 02 Apr 2009 02:06:03 +0000</pubDate>
		<guid isPermaLink="false">http://lifesinger.org/blog/?p=1130#comment-595</guid>
		<description>_toS.call(o) 是不是可以用
o + &#039;&#039;
来代替?</description>
		<content:encoded><![CDATA[<p>_toS.call(o) 是不是可以用<br />
o + &#8221;<br />
来代替?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lifesinger</title>
		<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/comment-page-1/#comment-592</link>
		<dc:creator>lifesinger</dc:creator>
		<pubDate>Tue, 10 Feb 2009 10:01:23 +0000</pubDate>
		<guid isPermaLink="false">http://lifesinger.org/blog/?p=1130#comment-592</guid>
		<description>&lt;p&gt;hax: try&lt;/p&gt;

&lt;pre&gt;
Object.prototype.toString.call(null)
Object.prototype.toString.call(document.all)
Object.prototype.toString.call(document.getElementById)
Object.prototype.toString.call(document.all.item)
&lt;/pre&gt;

&lt;p&gt;最神奇的当属item了&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>hax: try</p>
<pre>
Object.prototype.toString.call(null)
Object.prototype.toString.call(document.all)
Object.prototype.toString.call(document.getElementById)
Object.prototype.toString.call(document.all.item)
</pre>
<p>最神奇的当属item了</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lifesinger</title>
		<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/comment-page-1/#comment-594</link>
		<dc:creator>lifesinger</dc:creator>
		<pubDate>Sat, 07 Feb 2009 09:26:38 +0000</pubDate>
		<guid isPermaLink="false">http://lifesinger.org/blog/?p=1130#comment-594</guid>
		<description>&lt;p&gt;hax:&lt;/p&gt;

&lt;p&gt;1.xxx 不行，不是因为 1 上面没有 xxx，而是语法不合。写成(1).xxx就可以了。也就是说number和string其实都是有constructor属性的。当然这实际隐含了primitive到object的自动转换。&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>hax:</p>
<p>1.xxx 不行，不是因为 1 上面没有 xxx，而是语法不合。写成(1).xxx就可以了。也就是说number和string其实都是有constructor属性的。当然这实际隐含了primitive到object的自动转换。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lifesinger</title>
		<link>http://lifesinger.org/blog/2009/02/javascript-type-check-2/comment-page-1/#comment-593</link>
		<dc:creator>lifesinger</dc:creator>
		<pubDate>Sat, 07 Feb 2009 09:26:00 +0000</pubDate>
		<guid isPermaLink="false">http://lifesinger.org/blog/?p=1130#comment-593</guid>
		<description>&lt;p&gt;winter:&lt;/p&gt;

&lt;p&gt;这个其实跟浏览器类型检查是一个道理 对象类型检查不如对象属性检查
鸭子类型的本意其实不是prototype那样用的 跟下面这句话一个道理：
小心伪特性探测：比如if(window.ActiveXObject) { // 一大堆针对ie但和ActiveXObject没任何关系的代码 }&lt;/p&gt;

&lt;p&gt;还有就是
typeof检查type
Object.toString检查私有属性[[class]]
constructor检查公有constructor
instanceof实际上检查的是私有属性[[prototype]]&lt;/p&gt;

&lt;p&gt;这些东西你说它是类型确实挺像 但是其实混到一起也没什么价值&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>winter:</p>
<p>这个其实跟浏览器类型检查是一个道理 对象类型检查不如对象属性检查<br />
鸭子类型的本意其实不是prototype那样用的 跟下面这句话一个道理：<br />
小心伪特性探测：比如if(window.ActiveXObject) { // 一大堆针对ie但和ActiveXObject没任何关系的代码 }</p>
<p>还有就是<br />
typeof检查type<br />
Object.toString检查私有属性[[class]]<br />
constructor检查公有constructor<br />
instanceof实际上检查的是私有属性[[prototype]]</p>
<p>这些东西你说它是类型确实挺像 但是其实混到一起也没什么价值</p>
]]></content:encoded>
	</item>
</channel>
</rss>
