判断空对象,空数组(可用于容错处理)

最近有一个需求,需要判断调用接口返回值是否为空。结果返回的如果是个空对象,判断的时候为true,目标结果应该是返回false。以下为解决方法和注意事项。

注意:JavaScript中的数据类型自动转换时,空数组或空对象都的布尔类型不是false,而是【true】

JavaScript自动转换为布尔值【非常重要,和Python有很大的区别】

当JavaScript遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。

因此除了以下六个值,其他都是自动转为true

**【空数组[]和空对象{}的布尔类型都是true】**

  • undefined
  • null
  • -0
  • 0+0
  • NaN
  • ''(空字符串)

所以这里会有问题  res?ture:false //始终返回true

console.log(Boolean([])); // true 
console.log(Boolean({})); // true

//判断是否有备份配置        
_autoBackupList().then(res => {
    const isHasConfig = res?ture:false  //始终返回true               
    setHasConfig(isHasConfig)  //判断是否有配置                 
    setConfigObj(res)     //获取配置信息                    
})
 

解决方法

1、for in 循环判断

var obj = {};
var b = function() {
    for(var key in obj) {
    return false;
  }
  return true;
}
 

2、ES6的写法

var data = {};
var arr = Object.keys(data);
console.log(arr.length == 0);//true
 

3、jQ的写法

var data = {};
var b = $.isEmptyObject(data);
 

我用的第二种方法

  //判断是否有备份配置        
_autoBackupList().then(res => {                
    const hasConfig = Object.keys(res)  //是个数组                
    setHasConfig(!!hasConfig[0])  //判断是否有配置                  
    setConfigObj(res)     //获取配置信息                    
})
 

空数组判断

arr.length===0 //true

以上。在写代码的时候,对象和数组,先判断一下,存在再进行下一步处理,如

const cloud = vmData.length !=== 0&&vmData.cloud

避免由于没有数据导致的报错。

 

 
posted @ 2021-04-14 11:46  优前程  阅读(515)  评论(0编辑  收藏  举报