JS教程:数组类型检测和集合检测
Question:编写一个函数 isArray(testVar) 。当testVar是数组类型时,返回1;当testVar是集合时,返回2;其他情况返回0。Solution:一、数组类型检测(1)检测构造函数本来这应该是最简单的事情,Javascript中提供了instanceof运算符,可以检测某个变量是否某种类型的实例,一般情况下可以这样检测数组:testVar instanceof Array == true。但是,在跨frame的时候,等式不成立。假设测试页test.html的代码如下: <script language=”javascript” type=”text/javascript”> testframe.html的代码如下: <script language=”javascript” type=”text/javascript”> 输出的内容是false。似乎每个页面都有自己的Array类型,如果把isArray改写一下,输出的就是true: function isArray(testVar) { 检测testVar.constructor也会出现类似的情况。因此,这种方法不可行。 (2)检测特性通过数组独有的函数进行检测,比如检测testVar.sort是否未定义。这种方法在一般情况下也是可行的,但是健壮性不足。如果给testVar动态加了一个sort方法,判断就会失误。 (3)jQuery1.3带来了曙光没什么好说的,直接看代码,太牛了: if (Object.prototype.toString.call(testVar) === “[object Array]“) return 1; 二、集合检测所谓的集合就是可以通过下标访问但又不是数组的类型。已知的Javascript集合有两种,一种是HtmlCollection,另一种是函数的参数arguments。 (1)排他法在已知testVar不是数组的情况下,先检测它的length属性是否存在。包含length属性的类型也不少,比如window、String、某些HtmlElement。所以要检测的特征非常多: testVar.length != null && 由于其他情况实在太多,容易出现疏漏,所以最终还是没 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |