计算对象的键 / 属性数的最快方法是什么?它可以在不迭代对象的情况下完成此操作吗?即没有做
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
non-ECMA5
浏览器的方法) 你可以使用这段代码:
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()方法。