js判断是否为数组的函数:isArray()
typeof array今天刚好在学习⽀付宝 JS 框架 base.js 。瞄了⼀下,实现是这样的:
复制代码代码如下:
if (value instanceof Array ||
(!(value instanceof Object) &&
(String.call((value)) == '[object Array]') ||
typeof value.length == 'number' &&
typeof value.splice != 'undefined' &&
typeof value.propertyIsEnumerable != 'undefined' &&
!value.propertyIsEnumerable('splice'))) {
return 'array';
}
怎么说呢,乱。当然,也可以说是,“史上最全”,它确实使⽤了最主流的⽅法,只是把他们都写⼀起了⽽已。
像我们所知道的,⽤ instanceof 和 constructor 是最直接的、简单的⽅式:
复制代码代码如下:
var arr = [];
arr instanceof Array; // true
只是,由于在不同 iframe 中创建的 Array 并不共享 prototype。如果这样⽤。⿇烦就来了。那么,如果要应⽤在框架中,这种⽅式肯定是⾏不通的。倒是,使⽤ Douglas Crockford 的填鸭式⽅法是可以解决这个问题(《JavaScript 语⾔精粹》P61):
复制代码代码如下:
var is_array = function(value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
不过,是否还有更简单的⽅法呢?其实,像我们⾃⼰⽤的,不就是了么?
复制代码代码如下:
String.call(value) == '[object Array]'
上⾯这种写法,是 jQuery 正在使⽤的。⽬前,淘宝的 kissy 也是使⽤这种⽅式。难道这不是⽬前最简洁,⽽且最有效的⽅式么?个⼈感觉内部框架写得有点累赘了。例⾏总结,最终⽅案:
复制代码代码如下:
var isArray = function(obj) {
return String.call(obj) === '[object Array]';
}
==============
UPDATE: 2010.12.31 00:01(出处)
判断类型,很酷。具体的,跟上⾯是⼀个道理:
复制代码代码如下:
var is = function (obj,type) {
return (type === "Null" && obj === null) ||
(type === "Undefined" && obj === void 0 ) ||
(type === "Number" && isFinite(obj)) ||
String.call(obj).slice(8,-1) === type; }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。