@tony-yin
2018-04-25T10:25:23.000000Z
字数 861
阅读 767
前端
今天在项目中发现一个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对象是否存在
这篇文章里面讲的还是比较全面的,针对不同场景给出了不同的方案