JavaScript 判断对象是否为空“{}”

本文探讨了检测JavaScript中空对象的不同方法,包括循环检查、利用JSON.stringify、使用jQuery的isEmptyObject方法及Object.keys等。此外还讨论了一种特殊情况,即当属性设置为不可枚举时,上述方法均失效的情况,并提出了解决方案。

先列一下之前在网上看到的解决办法,然后再做分析:

方法一:  循环

function isEmptyObj(obj){
let o;
for(o in obj){
  return false;
}
return true;
}

方法二:借用JSON对象序列表化

var o = {};
JSON.stringify(o) === '{}'//true

方法三:Jquery的isEmptyObject方法

var o = {};
$.isEmptyObject(o)//true

方法四:枚举

var o = {};
Object.keys(o);//[]

通常情况下以上四种办法基本可以解决问题,但是有一种特殊情况,上述四种方法均不适用,即通过Object的defineProperty方法为obj定义属性,并且描述符enumerable配为false。

Object.defineProperty(o,'test',{enumerable:false});//此时test属性是不可被枚举的,因此以上四种方法均失效

在这种情况下,楼主想到的办法是,使用Object.getOwnPropertyNames(obj)来获取对象obj的属性名称,该方法返回一个数组,若数组的长度为0,则obj此时为{};以下是在浏览器上测试的结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值