对象是空的吗?

这个问题在这里已经有了答案:

  • 如何测试空的JavaScript对象? 39个答案

  • 我假设你的意思是“没有属性”。

    // Speed up calls to hasOwnProperty
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    
    function isEmpty(obj) {
    
        // null and undefined are "empty"
        if (obj == null) return true;
    
        // Assume if it has a length property with a non-zero value
        // that that property is correct.
        if (obj.length > 0)    return false;
        if (obj.length === 0)  return true;
    
        // If it isn't an object at this point
        // it is empty, but it can't be anything *but* empty
        // Is it empty?  Depends on your application.
        if (typeof obj !== "object") return true;
    
        // Otherwise, does it have any properties of its own?
        // Note that this doesn't handle
        // toString and valueOf enumeration bugs in IE < 9
        for (var key in obj) {
            if (hasOwnProperty.call(obj, key)) return false;
        }
    
        return true;
    }
    

    例子:

    isEmpty(""), // true
    isEmpty(33), // true (arguably could be a TypeError)
    isEmpty([]), // true
    isEmpty({}), // true
    isEmpty({length: 0, custom_property: []}), // true
    
    isEmpty("Hello"), // false
    isEmpty([1,2,3]), // false
    isEmpty({test: 1}), // false
    isEmpty({length: 3, custom_property: [1,2,3]}) // false
    

    如果您只需要处理ECMAScript5浏览器,则可以使用Object.getOwnPropertyNames而不是hasOwnProperty循环:

    if (Object.getOwnPropertyNames(obj).length > 0) return false;
    

    这将确保即使对象仅具有非枚举属性, isEmpty仍然会为您提供正确的结果。


    对于ECMAScript5(尽管在所有浏览器中都不支持),您可以使用:

    Object.keys(obj).length === 0
    

    编辑 :这个答案已被弃用,除非你出于某种原因不能使用ES5解决方案。 请注意,ES5支持现在很普遍,即使不支持,也可以使用Babel。 YMMV当然。


    简单和跨浏览器的方式是使用jQuery.isEmptyObject

    if ($.isEmptyObject(obj))
    {
        // do something
    }
    

    更多:http://api.jquery.com/jQuery.isEmptyObject/

    不过你需要jquery。

    链接地址: http://www.djcxy.com/p/31739.html

    上一篇: Is object empty?

    下一篇: json string to javascript object