判断一个数组是否为空

注意:判断数组 array 是否为空数组,即 [],需要用 array.length === 0 判断,不能直接比较 [] 。因为[] !== [] 为 true

js 中的数据类型 字符串、数字、布尔、数组、对象、Null、Undefined === 全等比较比较 2 个相同类型的对象,如果类型不同,就直接返回 false,如果类型相同,那就比较具体的值或具体的引用地址。

var arr=null;
if(arr===null){
    console.log('arr is null');
}
arr=undefined;
if(arr===null){
    console.log('arr is null');
}else if(arr===undefined){
    console.log('arr is undefined');
}
//arr 赋值一个数组对象
arr=[];
//if(arr.length==0){
if(arr.length===0){
   console.log('arr is empty');
}

所以在判断数组是否为空时,可以使用以下代码对象在做逻辑判断的时候,如果值为 null, undefined,转化 boolean 值 false。

try{
    if(!arr||(Object.prototype.toString.call(arr)==='[object Array]'&&arr.length===0))            {
       console.log('arr is null or empty');
    }
}cathc(error){
    //处理arr未被声明的情况
}

 

具体可以参看 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness

判断一个对象是否为空

js 中一般判断一个对象是否为空,可以写一个方法用 for..in 遍历,然后返回是否为空,

function isEmptyObject(e) {
  var t;
  for (t in e)
  return !1;
  return !0
} ;

不过在 ES5 中对象有一个很奇妙的一个遍历对象的方法,Object.keys(object);

这个方法接受一个对象作为参数,对这个对象的键进行遍历,并返回一个数组集合。

到这里就显而易见了。判断数组为空有很多方法,取第一个元素、数组长短等都可以判断。

所以判断一个对象为空可以写为:

console.log(Object.keys({}).length); //结果是0, 0的布尔值是false。

注:不要使用Object.keys({})[0],因为对象的键可以为数字,类似 jq 对象就是数组为 0 的对象,
例子:Object.keys({ 0: '测试' })[0] //结果是 0,其实我们期望的正确结果是 true,但是这个确实 false。