js判断是否为数组的函数: isArray()
2014-04-14 15:09
274 查看
今天刚好在学习支付宝 JS 框架 base.js 。瞄了一下,实现是这样的:
代码如下:
怎么说呢,乱。当然,也可以说是,“史上最全”,它确实使用了最主流的方法,只是把他们都写一起了而已。
像我们所知道的,用 instanceof 和 constructor 是最直接的、简单的方式:
代码如下:
只是,由于在不同 iframe 中创建的 Array 并不共享 prototype。如果这样用。麻烦就来了。那么,如果要应用在框架中,这种方式肯定是行不通的。倒是,使用 Douglas Crockford 的填鸭式方法是可以解决这个问题(《JavaScript 语言精粹》P61):
代码如下:
不过,是否还有更简单的方法呢?其实,像我们自己用的,不就是了么?
代码如下:
上面这种写法,是 jQuery 正在使用的。目前,淘宝的 kissy 也是使用这种方式。难道这不是目前最简洁,而且最有效的方式么?个人感觉内部框架写得有点累赘了。例行总结,最终方案:
代码如下:
判断类型,很酷。具体的,跟上面是一个道理:
代码如下:
代码如下:
if (value instanceof Array || (!(value instanceof Object) && (Object.prototype.toString.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 arr.constructor == 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')); };
不过,是否还有更简单的方法呢?其实,像我们自己用的,不就是了么?
代码如下:
Object.prototype.toString.call(value) =='[object Array]'
上面这种写法,是 jQuery 正在使用的。目前,淘宝的 kissy 也是使用这种方式。难道这不是目前最简洁,而且最有效的方式么?个人感觉内部框架写得有点累赘了。例行总结,最终方案:
代码如下:
var isArray = function(obj) { return Object.prototype.toString.call(obj)=== '[object Array]'; }
判断类型,很酷。具体的,跟上面是一个道理:
代码如下:
var is = function (obj,type) { return (type === "Null"&& obj === null) || (type === "Undefined" &&obj === void 0 ) || (type === "Number" &&isFinite(obj)) || Object.prototype.toString.call(obj).slice(8,-1)=== type; }
相关文章推荐
- js判断是否为数组的函数: isArray()
- js判断是否为数组的函数: isArray()
- js判断是否为数组的函数: isArray()
- js判断是否为数组的函数: isArray()
- javascript数据变量类型判断(JS变量是否是数组,是否是函数的判断)
- 判断是否为数组的函数: isArray()
- 判断数组是否包含某个元素的js函数实现方法
- 判断数组是否包含某个元素的js函数实现方法
- 判断数组是否已包含了某个元素的js函数
- js语法学习之判断一个对象是否为数组
- js判断一个数组是否重复
- JS判断一个数组中是否有重复值的三种方法
- 使用js,判断数组中是否有重复数据
- JS判断数组中是否有重复值得三种方法
- JS判断数组中是否有重复值的三种方法
- 判断js数组包是否包含某个元素
- js判断一个对象数组里是否存在某个元素
- 经典面试题:求数组的最大子序列和;实现函数 :判断一个自负喜欢是否是另一个字符串旋转所得;杨氏矩阵中查找一个数。
- JS判断一个数组中是否有重复值的三种方法
- js 判断数组是否为空