计算一个对象的键/属性数量的最快方法是什么? 有没有可能在不迭代对象的情况下做到这一点? 即不做
var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;
(Firefox确实提供了一个神奇的__count__
属性,但在第四版的某个地方被删除了。)
我不知道有什么方法可以做到这一点,但是为了保持最少的迭代,你可以尝试检查__count__
的存在,如果它不存在(即不是Firefox),那么你可以迭代这个对象并定义它供以后使用,例如。
if (myobj.__count__ === undefined) {
myobj.__count__ = ...
}
这样一来,任何支持__count__
的浏览器都会使用该对象,而只有那些不支持的浏览器才会进行迭代。如果计数发生变化而你不能这样做,你可以把它变成一个函数。
if (myobj.__count__ === undefined) {
myobj.__count__ = function() { return ... }
myobj.__count__.toString = function() { return this(); }
}
这样一来,只要你引用myobj.__count__
,函数就会启动并重新计算。