在jQuery中,检查数组的最佳过程是什么?



我想检查数组是否不是空

if(array != null){
  //code 
}

我也发现了这样的

if(Array.isArray(array)){
//code
}

if(array.length){
//code
}

哪个最好在三个上方使用?

我建议使用 Array.isArray和数组的 length属性

if (Array.isArray(array) && array.length) {
    // code
}

因为它检查了 array是否是数组,并且长度是否具有真实值。


比较您的尝试:

  1. 真相检查

    if (array != null) { // which is basically the same as if (array) {
        //code 
    }
    

    这是所有真实值的true,例如1'a'{}。不想要这个结果。

  2. 数组检查

    if (Array.isArray(array)) {
        // code
    }
    

    这仅检查array是一个数组,而不是其长度。空数组返回true,不需要。

  3. 长度检查

    if (array.length) {
        // code
    }
    

    这仅适用于具有长度属性的对象,具有真实的价值。

    当这接近想要的结果时,可能是错误的,例如

    之类的对象
    { length: 'foo' }
    

    或带有数组的对象。

如果您想知道对象是否是数组,则Array.isArray()会做。

如果您想知道数组是否具有项目,则比array.length !== 0会做。

如果您想知道变量是否不超过 array !== null

我用来 array.length要检查数组是否没有空,请使用if( array.length > 0) {}

最好检查数组的长度,但是其中有一个问题。考虑是否有人在数组中输入不确定的值,那么数组将为空,但仍大于0。

for(var i=0,i<array.length;i++){
 if(typeof(array[i]) !== 'undefined'){
 };
};
var isEmptyArray = function(arr) {
    return (arr || []).length === 0;
}
var arr1 = [1, 2, 3];
var arr2 = [];
var arr3 = undefined;
console.log(isEmptyArray(arr1));  // false
console.log(isEmptyArray(arr2));  // true
console.log(isEmptyArray(arr3));  // true

最好的解决方案是

if (array.length>0){
....
}

但是,如果您计划从数组中删除索引,则该句子有问题,因为您可以具有这样的数组[未定义,未定义,未定义],Whos长度为3,但在技术上是空的。

>
var a = [1,2,3];
delete a[0];
delete a[1];
delete a[2];
a.length > 0 /// true
a /// [undefined x 3]

考虑到这一点以做确切的句子

最新更新