3

我需要获取 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)) {

我认为这段代码必须始终运行良好,也没有这种情况。

我错了?

4

3 回答 3

3

请参阅:如何有效地计算 JavaScript 中对象的键/属性的数量?

是的,hasOwnProperty 方法在这里确实是多余的。

无论如何,为什么您需要获取属性计数?恐怕你正在以一种糟糕的方式解决问题。

于 2013-02-25T14:19:32.983 回答
2

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

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

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

于 2013-02-25T14:24:26.607 回答
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。

于 2013-02-25T14:24:33.020 回答