检测js对象是不是数组类型?

面试时候被人问如何检测一个未知变量是不是数组类型,丢脸啊,老祖宗的脸都丢没了,这都不会,回家啃书本去吧!!!

var a = [];
方法一:Array.isArray([])  //true

typeof a 在这里是帮不上忙的呦,对于数组类型返回的是object,并且是对于除了函数以外的所有对象都是如此,心累吧,瞎忙活!

方法二:a instanceof Array  //true
但是不能视为一个可靠的数组检测方法。
问题在于:web浏览器中有可能有多个窗口或者frame存在,每个窗口都有自己的js环境,有自己的全局对象window,每个全局对象都有自己的一组构造函数,都是不相等的呦,因此一个窗口中的对象不可能是另外一个窗口中的构造函数的实例。窗体之间的混淆不常发生。

这里有个小伙伴踩坑的记录:https://www.cnblogs.com/laiqun/p/5645801.html

方法三:检测对象的类属性,对于数组来说该属性的值总是‘Array’,

Object.prototype.toString()方法进行判断,因此isArray()函数的代码可以酱紫写

 var isArray = Function.isArray || function(o){
     return typeof o === 'object' &&
     Object.prototype.toString.call(o) ==='[object Array]';
 }

 

posted @ 2018-05-03 17:51  tangjiao_Miya  阅读(285)  评论(0编辑  收藏  举报