@tony-yin
2018-04-25T02:25:23.000000Z
字数 861
阅读 1054
前端
今天在项目中发现一个Bug,通过debug发现最终的原因便是判断对象是否为空导致的错误,一个小小的错误反映出Javascript这门语言的不严谨性,也提醒我们得熟悉它的一些技巧和原理,避免经常在一些问题上踩坑
场景还原:通过if(object)判断对象内容不为空,
obj = {}; // obj其实是通过其他方式获得,但是它的内容为空if (obj) {xxx; // 判断当obj不为空的时候,执行判断内的代码}
那么问题就出现了,即使对象内容为空,这个判断代码块里面的代码还是会被执行
用chrome简单的验证了一下:

这和一些其他语言不一样,比如php,python是可以通过if(object)来检查对象是否为空的,但是JS不可以,这个问题要不是遇到了肯定想不到
那么JS如何判断对象内容是否为空呢?网上搜了下,大概有以下方式:
var tt = {};if (JSON.stringify(tt) == "{}") {console.log('tt is not empty!');}
var tt = {};var t = {id: 1};if (tt.id) {console.log('tt is not empty!');}if (t.id) {console.log('t is not empty');}
方法1相对于方法2来说更加严谨,阅读性高,而方法2的效率却比方法1高
如果用的是jquery的话,可以使用其提供的现有方法:isEmptyObject,这是jQuery1.4版本后加入的功能,具体用法:
var tt = {};if ($.isEmptyObject(tt)) { // jQuery.isEmptyObject(tt)这样调用也可以console.log('tt is empty!');}
借助上面的问题,顺便了解了一下:如何判断Javascript对象是否存在
这篇文章里面讲的还是比较全面的,针对不同场景给出了不同的方案
