协慌网

登录 贡献 社区

如何有效地计算 JavaScript 中对象的键 / 属性数?

计算对象的键 / 属性数的最快方法是什么?它可以在不迭代对象的情况下完成此操作吗?即没有做

var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;

(Firefox 确实提供了一个神奇的__count__属性,但是在版本 4 的某个地方删除了它。)

答案

要在任何与ES5-compatible environment执行此操作,例如[Node](http://nodejs.org), Chrome, IE 9+, FF 4+, or Safari 5+:

Object.keys(obj).length

你可以使用这段代码:

if (!Object.keys) {
    Object.keys = function (obj) {
        var keys = [],
            k;
        for (k in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, k)) {
                keys.push(k);
            }
        }
        return keys;
    };
}

然后您也可以在旧版浏览器中使用它:

var len = Object.keys(obj).length;

如果你正在使用Underscore.js可以使用_.size (感谢 @douwe):
_.size(obj)

或者你也可以使用_.keys ,这对某些人来说可能更清楚:
_.keys(obj).length

我强烈推荐使用 Underscore,它是一个用于执行大量基本操作的紧凑库。只要有可能,它们就会匹配 ECMA5 并遵循本机实现。

否则我支持 @ Avi 的答案。我编辑它以添加指向 MDC 文档的链接,其中包含可以添加到非 ECMA5 浏览器的 keys()方法。