js判断是否为数组的函数: isArray()


Posted in Javascript onOctober 30, 2011

今天刚好在学习支付宝 JS 框架 base.js 。瞄了一下,实现是这样的:

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]'; 
} 
==============

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)) || 
Object.prototype.toString.call(obj).slice(8,-1) === type; 
}
Javascript 相关文章推荐
Mootools 1.2教程 选项卡效果(Tabs)
Sep 15 Javascript
JavaScript 事件冒泡简介及应用
Jan 11 Javascript
jQuery 技巧小结
Apr 02 Javascript
Jquery 自定义动画概述及示例
Mar 29 Javascript
js中top的作用深入剖析
Mar 04 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
Sep 01 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
使用JavaScript实现弹出层效果的简单实例
May 31 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 Javascript
JS trim去空格的最佳实践
Oct 30 #Javascript
js中更短的 Array 类型转换
Oct 30 #Javascript
JavaScript Array Flatten 与递归使用介绍
Oct 30 #Javascript
关于图片按比例自适应缩放的js代码
Oct 30 #Javascript
js 弹出菜单/窗口效果
Oct 30 #Javascript
基于Jquery+Ajax+Json的高效分页实现代码
Oct 29 #Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 #Javascript
You might like
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
PHP中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
js实现打字小游戏
2019/12/17 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
python之wxPython菜单使用详解
2014/09/28 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
python字符串常用方法
2018/06/14 Python
Python笔试面试题小结
2019/09/07 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python调用飞书发送消息的示例
2020/11/10 Python
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
留学推荐信怎么写
2014/01/25 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
个人融资协议书
2014/10/02 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
处罚决定书范文
2015/06/24 职场文书