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 相关文章推荐
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
Js操作Select大全(取值、设置选中等等)
Oct 29 Javascript
使用jquery组件qrcode生成二维码及应用指南
Feb 22 Javascript
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
浅谈js数据类型判断与数组判断
Aug 29 Javascript
实例解析angularjs的filter过滤器
Dec 14 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
解决iview打包时UglifyJs报错的问题
Mar 07 Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 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开发过程中常用函数收藏
2009/12/14 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
jQuery 学习 几种常用方法
2009/06/11 Javascript
js 加载并解析XML字符串的代码
2009/12/13 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python脚本实现下载合并SAE日志
2015/02/10 Python
利用python画一颗心的方法示例
2017/01/31 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
工艺工程师工作职责
2013/11/23 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书