获取js对象中的项目数量

时间:2013-02-25 14:15:37

标签: javascript

我需要获取js对象属性计数。

我搜索并找到了这样的解决方案:

var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
var count = 0;
for (var k in foo) {
    if (foo.hasOwnProperty(k)) {
      ++count;
    }
}

问题:为什么需要条件if (foo.hasOwnProperty(k)) {

我认为这段代码必须始终正常,没有这个条件。

我错了?

3 个答案:

答案 0 :(得分:3)

请参阅:How to efficiently count the number of keys/properties of an object in JavaScript?

是的,hasOwnProperty方法在这里真的很简单。

无论如何,为什么你需要获得属性?我担心你正在以一种糟糕的方式解决问题。

答案 1 :(得分:2)

某些对象具有系统添加的属性(即原型)。

你通常不想数数。您询问的条件将确保您只计算属于您的对象本身的属性。

因此,如果您打算创建一个将返回任何对象的计数的函数,则可能更好地包含该条件,否则您不一定需要。

答案 2 :(得分:1)

这是为了防止你计算继承的成员。

如果你这样做(不可取):

Object.prototype.x = 1;

然后这给出了4的计数:

var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
var count = 0;
for (var k in foo) {
  ++count;
} 

但是if (foo.hasOwnProperty(k))它仍然会给出3。