我想检查数组是否不是空
if(array != null){
//code
}
我也发现了这样的
if(Array.isArray(array)){
//code
}
和
if(array.length){
//code
}
哪个最好在三个上方使用?
我建议使用 Array.isArray
和数组的 length
属性
if (Array.isArray(array) && array.length) {
// code
}
因为它检查了 array
是否是数组,并且长度是否具有真实值。
比较您的尝试:
真相检查
if (array != null) { // which is basically the same as if (array) { //code }
这是所有真实值的
true
,例如1
,'a'
,{}
。不想要这个结果。数组检查
if (Array.isArray(array)) { // code }
这仅检查
array
是一个数组,而不是其长度。空数组返回true
,不需要。长度检查
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]
考虑到这一点以做确切的句子