[关闭]
@tony-yin 2018-04-25T10:25:23.000000Z 字数 861 阅读 767

JS判断对象是否为空

前端


今天在项目中发现一个Bug,通过debug发现最终的原因便是判断对象是否为空导致的错误,一个小小的错误反映出Javascript这门语言的不严谨性,也提醒我们得熟悉它的一些技巧和原理,避免经常在一些问题上踩坑

场景还原:通过if(object)判断对象内容不为空,

  1. obj = {}; // obj其实是通过其他方式获得,但是它的内容为空
  2. if (obj) {
  3. xxx; // 判断当obj不为空的时候,执行判断内的代码
  4. }

那么问题就出现了,即使对象内容为空,这个判断代码块里面的代码还是会被执行
chrome简单的验证了一下:

object empty

这和一些其他语言不一样,比如php,python是可以通过if(object)来检查对象是否为空的,但是JS不可以,这个问题要不是遇到了肯定想不到

那么JS如何判断对象内容是否为空呢?网上搜了下,大概有以下方式:

通过JSON.stringify将对象转换成字符串进行判断

  1. var tt = {};
  2. if (JSON.stringify(tt) == "{}") {
  3. console.log('tt is not empty!');
  4. }

通过读取对象元素

  1. var tt = {};
  2. var t = {id: 1};
  3. if (tt.id) {
  4. console.log('tt is not empty!');
  5. }
  6. if (t.id) {
  7. console.log('t is not empty');
  8. }

总结

方法1相对于方法2来说更加严谨,阅读性高,而方法2的效率却比方法1高

jQuery提供了判断对象是否为空的API

如果用的是jquery的话,可以使用其提供的现有方法:isEmptyObject,这是jQuery1.4版本后加入的功能,具体用法:

  1. var tt = {};
  2. if ($.isEmptyObject(tt)) { // jQuery.isEmptyObject(tt)这样调用也可以
  3. console.log('tt is empty!');
  4. }

判断对象是否存在

借助上面的问题,顺便了解了一下:如何判断Javascript对象是否存在

这篇文章里面讲的还是比较全面的,针对不同场景给出了不同的方案

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注