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 动态调整图片尺寸实现代码
Dec 28 Javascript
JS 表单验证大全
Nov 23 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
Jul 10 Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 Javascript
IScroll5 中文API参数说明和调用方法
May 21 Javascript
AngularJS基础 ng-mouseover 指令简单示例
Aug 02 Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
Vue.js 图标选择组件实践详解
Dec 03 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 Javascript
JavaScript中window和document用法详解
Jul 28 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 各种应用乱码问题的解决方法
2010/05/09 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
Yii全局函数用法示例
2017/01/22 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
TensorFlow如何实现反向传播
2018/02/06 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
中层干部竞聘演讲稿
2014/05/15 职场文书
家庭困难证明
2014/10/12 职场文书
就业导师推荐信范文
2015/03/27 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
Oracle中update和select 关联操作
2022/01/18 Oracle
Python正则表达式中flags参数的实例详解
2022/04/01 Python
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python