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 相关文章推荐
IE7提供XMLHttpRequest对象为兼容
Mar 08 Javascript
Javascript日期对象的dateAdd与dateDiff方法
Nov 18 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
通过JS来判断页面控件是否获取焦点
Jan 03 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
jQuery简单实现禁用右键菜单
Mar 10 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
Jul 17 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
Node.js之readline模块的使用详解
Mar 25 Javascript
layui导出所有数据的例子
Sep 10 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
PHP使用者状态管理功能的应用
2006/10/09 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
聊聊Python中的pypy
2018/01/12 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
中文专业毕业生自荐书范文
2014/01/04 职场文书
高二政治教学反思
2014/02/01 职场文书
王老吉广告词
2014/03/20 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
赢在执行观后感
2015/06/16 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
MySql分区类型及创建分区的方法
2022/04/13 MySQL
SQL SERVER中的流程控制语句
2022/05/25 SQL Server