javascript中的全局静态函数

时间:2012-02-17 20:54:17

标签: javascript

为什么以下内容会返回undefined

var global_vars = 
{

    countNumOfProperties : 
        function (obj) 
        {
            var count = 0;
            for (var k in obj) {
                if (obj.hasOwnProperty(k)) {
                    ++count;
                }
                return count;
            }
        }    
};


var DS =
{
    file_types_lookup : {}
};


global_vars.countNumOfProperties(DS.file_types_lookup)

4 个答案:

答案 0 :(得分:2)

因为对象没有自己的属性,所以for循环没有执行的迭代,也没有执行return语句。

我猜你错放了}

var count = 0;
for (var k in obj) {
    if (obj.hasOwnProperty(k)) {
         ++count;
    }
}
return count;

答案 1 :(得分:1)

return语句位于循环内部,因此永远不会到达。

        for (var k in obj) {
            if (obj.hasOwnProperty(k)) {
                ++count;
            }
            return count;
        }

应该是

        for (var k in obj) {
            if (obj.hasOwnProperty(k)) {
                ++count;
            }
        }
        return count;

这样,在返回总和之前将检查每个属性。

如上所述,该函数将返回

  • 1表示第一个可枚举属性是自己的属性,或
  • 0表示没有自己的属性,但有可枚举的继承属性,或
  • undefined表示没有可枚举的属性own或其他。

答案 2 :(得分:1)

return count;语句应该在for循环之外。

答案 3 :(得分:1)

观察传递 具有属性的对象时会发生什么:

> global_vars.countNumOfProperties({foo: 1})
1
> global_vars.countNumOfProperties({foo: 1, bar: 2})
1
> global_vars.countNumOfProperties({foo: 1, bar: 2, baz: 3})
1

问题是你将return语句放在循环中。它将在循环体首次执行时执行,返回1并结束循环。但是,如果循环体永远不会运行(因为没有属性),它永远不会运行,并且函数返回默认值undefined

你只需要在循环之外将return向下移动一行。