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 3D球状导航的文章分类
Jul 06 Javascript
js简单实现让文本框内容逐个字的显示出来
Oct 22 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
Mar 20 Javascript
jQuery学习心得总结(必看篇)
Jun 10 Javascript
zTree实现节点修改的实时刷新功能
Mar 20 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 Javascript
Electron-vue脚手架改造vue项目的方法
Oct 22 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 Javascript
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
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程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php提取微信账单的有效信息
2018/10/01 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
教师应聘个人求职信
2013/12/10 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
C++程序员求职信范文
2014/04/14 职场文书
卫生系统先进事迹
2014/05/13 职场文书
节能标语大全
2014/06/21 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
厉行节约工作总结
2015/08/12 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电