$.isEmptyObject 函数疑问

$.isEmptyObject 我们知道是判断对象是否为空,如果不存在也返回false,但是我想问的是:这个和我们直接写判断有什么区别呢:比如

if($.isEmptyObject($('.classname'))) 和 if($('.classname'))

还请大神指教:

阅读 3.7k
3 个回答

判断的对象不一样,$.isEmptyObject判断的是js对象即{},你理解的是jquery的DOM对象。

不一样的,完全不一样。

if这种会先把对象调用valueOf,然后类型转化为boolean,再然后判断走,判断的是类型转化后是否为真。

而isEmptyObject是判断这个是不是空对象!

这种问题都是直接看源码吧
https://github.com/jquery/jqu...

    isEmptyObject: function( obj ) {

        /* eslint-disable no-unused-vars */
        // See https://github.com/eslint/eslint/issues/6125
        var name;

        for ( name in obj ) {
            return false;
        }
        return true;
    },

你试试

if({}) alert()

// isEmptyObject
for(var i in {}) alert(i);

jquery源码部分:

isEmptyObject: function( obj ) {
        var name;
        for ( name in obj ) {
            return false;
        }
        return true;
    },

这个方法就是直接判断是不是空的对象,$('')返回的是一个jquery对象,即使没有这个DOM,还是返回一个jquery对象,是个jquery对象,起码jquery的方法都会有,所以调用这个方法势必返回false

所以与其例子里要判断dom是否存在,用$('').length!=0 更好~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题