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 相关文章推荐
用JS实现一个页面多个css样式实现
May 29 Javascript
JavaScript 笔记二 Array和Date对象方法
May 22 Javascript
JavaScript数字和字符串转换示例
Mar 26 Javascript
JavaScript中switch判断容易犯错的一个细节
Aug 27 Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 Javascript
javascript笔记之匿名函数和闭包
Feb 06 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
Apr 25 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
jQuery实现右侧抽屉式在线客服功能
Dec 25 jQuery
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 Javascript
vue如何实现关闭对话框后刷新列表
Apr 08 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 采集心得技巧
2009/05/15 PHP
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
教你怎样写好自我评价
2013/10/05 职场文书
语文教学随笔感言
2014/02/18 职场文书
教师党员自我评价范文
2015/03/04 职场文书
初级职称评定工作总结
2015/08/13 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
JavaScript 原型与原型链详情
2021/11/02 Javascript
搭建Yolov5服务器
2022/04/30 Servers