判断空对象,空数组(可用于容错处理)
最近有一个需求,需要判断调用接口返回值是否为空。结果返回的如果是个空对象,判断的时候为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
避免由于没有数据导致的报错。
信息创造价值, 知识就是力量。