像 Ajaxian,StackOverflow 等,搜一下,到处都在讨论 isArray() 的实现。对于一切都是对象的 JavaScript 来说,确实有点麻烦。今天刚好在学习支付宝 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;
}

判断是否为数组的函数: isArray()相关推荐

  1. JavaScript判断数据类型是不是数组

    JavaScript判断数据类型是不是数组 1.Array.isArray(es6 新增) 在这里插入代码片 Array.isArray([]) true Array.isArray({}) fals ...

  2. 函数的相关操作——利用函数翻转任意数组||利用函数冒泡排序||利用函数判断闰年

    利用函数翻转任意数组 利用函数冒泡排序 利用函数判断闰年 用户输入年份,输出当前年份2月份的天数

  3. 笔记整理1----Java语言基础(一)01 变量与数据类型+02 运算符与表达式+03 条件判断与循环语句+04 JAVA数组+05 函数与方法

    01 变量与数据类型+02 运算符与表达式+03 条件判断与循环语句+04 JAVA数组+05 函数与方法 第01天 java基础知识 今日内容介绍  Java概述.helloworld案例  工 ...

  4. html中显示变量的数组,javascript如何判断变量是不是数组?

    javascript如何判断变量是不是数组?下面本篇文章就来给大家介绍一下使用javascript判断变量是不是数组的几种方法,希望对大家有所帮助. 方案一:使用instanceof运算符 语法:变量 ...

  5. 判断是否为数组的 JavaScript 方法总结

    前言 我们在日常开发中,常常有判断某值类型需求,今天我们总结一下常见的几种用来判断是否为数组的 JavaScript 方法. Array.isArray Array.isArray() 是ES5新增的 ...

  6. php判断二维数组里值均为空,php中经典方法实现判断多维数组是否为空

    php中经典方法实现判断多维数组是否为空 复制代码 代码如下: //判断一个数组是否为空 /** array( ); 空 array( array( ), array( ), array( ) ); ...

  7. js判断数据类型如判断是否为数组是否为字符串等等

    1 判断是否为数组类型 2 判断是否为字符串类型 3 判断是否为数值类型 !isNaN(变量) 如果为true就是数字类型 4 判断是否为日期类型 5 判断是否为函数 6 判断是否为对象 一.判断是否 ...

  8. 判断一个对象是不是数组类型,最全方法

    判断一个对象是不是数组类型 判断一个对象是不是数组类型,可以分为判断原型对象,判断构造函数和判断内部class属性三大类,下面代码是所有方法. // 判断一个对象是不是数组类型var a = 10,b ...

  9. 【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

    文章目录 一.抽象 二维数组 业务函数 1.二维数组 打印函数 2.二维数组 排序函数 二.完整代码示例 一.抽象 二维数组 业务函数 1.二维数组 打印函数 注意 , 二维数组 作为 函数参数 输入 ...

最新文章

  1. 人工智能和中国学霸比赛做卷子居然输了?
  2. 文巾解题 189. 旋转数组
  3. 学习笔记(十四)——MySQL(CRUD)
  4. 段错误 (核心已转储)_向大厂看齐!为自己的程序增加自动转储的功能!
  5. SQL Server六步改善安全规划全攻略
  6. 微信有电脑客户端吗_微信电脑版有哪些功能呢
  7. python循环语句嵌套_Python 循环语句
  8. pycharm 开发app_windows及mac下开发Excel, python+xlwings开发环境配置
  9. 根据后台返回地址实现图片展示_微信小程序 - 前端接入七牛云上传图片和视频...
  10. python去除列表指定位置元素_Python实现判断并移除列表指定位置元素的方法
  11. socket和udp
  12. 。。。。看毛片算法_(:з」∠)_ /FZU - 2275
  13. 检测OTU序列遗传发育信号的R实现
  14. ios 隐藏app的插件_教你如何在iPad和iPhone中隐藏APP应用 划重点了
  15. 使用Flutter开发Github客户端及学习历程的小结
  16. 服务器加内存系统,服务器加内存的方法
  17. 个人总结感想系列 - 2013年工作和生活总结
  18. 学计算机专业选i5四核还是6核,计算机CPU的4核和6核有什么区别?
  19. .NET Core2.0 WebApi 接收模型对象参数为Null
  20. spark程序运行异常:java.lang.OutOfMemoryError: GC overhead limit exceeded

热门文章

  1. 基于Springboot开发实现的图书管理系统(附源码)
  2. 关于ACCESS数据库版本问题
  3. 高级驱动——(驱动所有按键)
  4. 开源协议(Open Source License)
  5. minio分布式解决方案
  6. Jupyter Notebook 更改默认目录
  7. 计算机除鼠标外的指向设备,笔记本电脑有哪些不同的指向设备(Different Pointing Devices for Notebooks)?...
  8. 计算机访问控制机制,访问控制策略和机制-信息安全工程师知识点
  9. php随机壁纸api,【编码书生】Bing 随机壁纸 API
  10. AssetMark背后,是华泰的野心?还是TAMP的崛起?| 亿欧解案例