如何确定对象是否包含内容?

时间:2014-06-04 02:58:45

标签: javascript

如果我设置这样的变量:

var a = {};

检查是否有任何内容

var b = { x: 1 }

检查是否有任何内容

var c = { y: null }

我认为测试(a)不起作用,因为它不是空的。那么如果我事先不知道内容是什么,我如何检查它是否有一些内容?在这种情况下,我希望变量bc显示为包含内容。

5 个答案:

答案 0 :(得分:1)

function isEmpty(input)
{
    var result = true;


    for(item in input)
        result = false;

    return result;
}

答案 1 :(得分:1)

有点罗嗦,但这应该有效:

var hasProperties = false;
for(var prop in obj) {
    hasProperties = true;
    break;
}

答案 2 :(得分:0)

以下是jQuery所做的一段代码:

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

答案 3 :(得分:0)

尝试if(Object.keys(a).length)

答案 4 :(得分:0)

很多答案,但我想您要检查对象的自己的属性:

for (var p in obj) {
  if (obj.hasOwnProperty(p)) {
    // obj has at least one enumerable own property
  }
}

但请注意,在ES5中,可以使用不可枚举的自有属性构造对象:

function hasEnumerableOwnProperties(obj) {
  for (var p in obj) {
    if (obj.hasOwnProperty(p)) return true;
  }
  return false;
}

var obj = {}

Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'})

console.log(hasEnumerableOwnProperties(obj) + ':' + obj.foo); // false:foo

Javascript的设计并不适合这种分析,如果你专注于特定的属性,功能或属性(即使用特征检测),它会好得多。

不要试图根据简单(通常是不确定的)测试推断一些一般行为(鸭子打字)。