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 相关文章推荐
学习jquery必备 api中英文对照的chm手册 下载
May 03 Javascript
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
Dec 19 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
jquery如何把参数列严格转换成数组实现思路
Apr 01 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
基于javascript实现动态时钟效果
Aug 18 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
servlet+jquery实现文件上传进度条示例代码
Jan 25 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
JavaScript监听触摸事件代码实例
Dec 30 Javascript
javascript+Canvas实现画板功能
Jun 23 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python学生信息管理系统修改版
2018/03/13 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python二进制文件的转译详解
2019/07/03 Python
Python 画出来六维图
2019/07/26 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
异常和异常类的概念
2014/09/12 面试题
精彩的大学生自我评价
2013/11/17 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
英语读书笔记
2015/07/02 职场文书