JS 中如何判断数组

Posted

tags:

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

参考技术A JS 中有四种方式判断数据类型,它们分别是: typeof 、 instanceof 、 constructor 、 Object.prototype.toString 。

在 ES5 中,新增了几种方式可以用来进行数组的判断,它们是 Object.prototype.isPrototypeOf 、 Array.isArray 和 Object.getPrototypeOf 。

很遗憾,对于任何引用类型的数据(包括 null ), typeof 统一返回 Object 字符串,所以不能用它来判断 JS 中的数组。

于是可以通过 instanceof 检测数据的原型链中是否存在 Array 构造函数来判断数据是否是数组。

对象实例有一个 constructor 属性, constructor 指向对象实例的构造函数。于是,我们可以通过判断数据的 constructor 是否为 Array 构造函数即可。

要注意: constructor 是可以被修改的,所以这种判断方式不可靠。

toString 可以用于检测对象的类型,它返回一个字符串。为了每个对象都能通过 Object.prototype.toString 来判断,需要借助函数的 call 或者 apply 方法。

这个方法没什么好说的,直接调用即可,会返回一个布尔值。

根据 ES5 新增的这个方法,我们可以把数组的原型对象与需要判断对象的原型进行比较,如果两者是全等关系,那么可以认为它是数组。

借用 ES5 新增的 isPrototypeOf 方法,可以直接了当的通过 Array 调用来判断目标数据是否是数组类型。

ES5 新增的两种方法都与原型链有关,理解并掌握原型相关内容还是判断数组的关键。方便理解与记忆的话,可以把 isArray 和 isPrototypeOf 放在一起,他们返回的都是布尔值,并且用途也相似。

getPrototypeOf 方法则是用来找到被检测数据的原型,拿到原型后还要与 Array.prototype 进行比较。

JS中如何判断数组中是不是包含某一元素

可以直接使用数组的indexOf方法来判断,如果元素存在于数组中,那么返回元素在数组中的下标值,如果不存在,那么返回-1,但是该方法在某些版本的IE中是不起作用,所以建议使用jquery的inArray方法,该方法返回元素在数组中的下标,如果不存在与数组中,那么返回-1,代码如下所示:

/**
 * 使用jquery的inArray方法判断元素是否存在于数组中
 * @param Object arr 数组
 * @param Object value 元素值
 */
 function isInArray2(arr,value)
    var index = $.inArray(value,arr);
    if(index >= 0)
        return true;
    
    return false;

参考技术A 遍历比较,没有现成的方法

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

js中如何判断数组中是不是含有某一项

jquery如何判断数组是不是为空?

Js如何判断数组为空

JS中如何判断数组中是不是包含某一元素

MATLAB 如何判断某变量等于某数组中的一个元素

js怎么判断空数组