js判断数组

Posted zhengzhengguoshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js判断数组相关的知识,希望对你有一定的参考价值。

1.constructor

在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用

就是返回对象相对应的构造函数。从定义上来说跟instanceof不太一致,但效果都是一样的

如: (a instanceof Array)   //a是否Array的实例?true or false

   (a.constructor == Array)  // a实例所对应的构造函数是否为Array? true or false

较为严谨并且通用的方法:

function isArray(object){
    return object && typeof object===\'object\' &&
            Array == object.constructor;
}

2.特性判断法

以上方法均有一定的缺陷,但要相信人民大众的智慧是无所不能及的,我们可根据数组的一些特性来判断其类型 

复制代码
function isArray(object){
    return  object && typeof object===\'object\' &&    
            typeof object.length===\'number\' &&  
            typeof object.splice===\'function\' &&    
             //判断length属性是否是可枚举的 对于数组 将得到false  
            !(object.propertyIsEnumerable(\'length\'));
}
复制代码

有length和splice并不一定是数组,因为可以为对象添加属性,而不能枚举length属性,才是最重要的判断因子。

ps: 在这里普及下 propertyIsEnumerable 方法:

object. propertyIsEnumerable(proName)

判断指定的属性是否可列举

备注:如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。

propertyIsEnumerable 属性不考虑原型链中的对象。

示例:

var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));

 

3.最简单的方法

function isArray(o) {
    return Object.prototype.toString.call(o) === ‘[object Array]‘;
}

 



以上是关于js判断数组的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript笔试题(js高级代码片段)

JS的数据类型判断函数数组对象结构处理日期转换函数,浏览器类型判断函数合集

javascript常用代码片段

几个关于js数组方法reduce的经典片段

几个关于js数组方法reduce的经典片段

web代码片段