博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS判断数组方法大全
阅读量:6262 次
发布时间:2019-06-22

本文共 1406 字,大约阅读时间需要 4 分钟。

支付宝 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

只是,由于。如果这样用。麻烦就来了。那么,如果要应用在框架中,这种方式肯定是行不通的。倒是,使用 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]'; }

判断类型,很酷。具体的,跟上面是一个道理:

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; }

 

转载于:https://www.cnblogs.com/huawy/p/5791370.html

你可能感兴趣的文章
MVP福利--利用Azure虚拟机玩Windows Server 2012
查看>>
Mac中将delete键定义为删除键
查看>>
python 函数关键参数
查看>>
ubuntu一键安装lamp
查看>>
漫谈 Clustering (1): k-means
查看>>
SQL Server 查询性能优化——索引与SARG(三)
查看>>
Oracle EBS:打开工作日历查看
查看>>
浅谈字节序(Byte Order)及其相关操作
查看>>
OSG闪存
查看>>
C#迭代器
查看>>
[Android] Change_xml.sh
查看>>
POJ-1925 Spiderman 动态规划
查看>>
实战BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer ....
查看>>
Linux编程基础——线程概述
查看>>
Hive内部表外部表转化分析
查看>>
【转】使用Xcode和Instruments调试解决iOS内存泄露
查看>>
CDE: Automatically create portable Linux applications
查看>>
微信公众平台开发(4)天气预报
查看>>
WPF: RenderTransform特效
查看>>
基础才是重中之重~你是否真正了解TransactionScope?
查看>>