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 Xml增删改查(IE下)操作实现代码
Jan 30 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
Apr 13 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 Javascript
javascript中Object使用详解
Jan 26 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
Jun 01 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
jQ处理xml文件和xml字符串的方法(详解)
Nov 22 Javascript
元素全屏的设置与监听实例
Nov 28 Javascript
微信小程序实现form表单本地储存数据
Jun 27 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
Mar 10 Javascript
修改Vue打包后的默认文件名操作
Aug 12 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+mysql扎实个人基本功
2008/03/27 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
Python写入CSV文件的方法
2015/07/08 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
Python如何给函数库增加日志功能
2020/08/04 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
一年级家长会邀请函
2014/01/25 职场文书
元旦晚会邀请函
2014/02/01 职场文书
求职面试个人自我评价
2014/02/28 职场文书
师范生自我鉴定
2014/03/20 职场文书
师德师风自查总结
2014/10/14 职场文书
《我是什么》教学反思
2016/02/16 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android