javascript 对象中的元素数

有没有办法(从某个地方)获取Javascript对象中的元素数量?(即常数时间复杂度)。

我找不到检索该信息的属性或方法。到目前为止,我只能考虑对整个集合进行迭代,但这是线性时间。
奇怪的是,没有直接访问物体的大小,你不觉得吗。

编辑:
我说的是对象(不是一般的对象):Object

var obj = new Object ;

答案 1

尽管 JS 实现可能会在内部跟踪这样的值,但没有标准的方法来获取它。

过去,Mozilla的Javascript变体暴露了非标准__count__,但它已经在1.8.5版本中被删除了。

对于跨浏览器脚本,您只能显式迭代属性并检查:hasOwnProperty()

function countProperties(obj) {
    var count = 0;

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

    return count;
}

在支持 ECMAScript 5 的实现中,也可以写成 (Kudos to Avi Flax)

function countProperties(obj) {
    return Object.keys(obj).length;
}

请记住,您还会错过不可枚举的属性(例如数组的)。length

如果您使用的是jQuery,Prototype,Mootools$whatever最新炒作之类的框架,请检查它们是否带有自己的集合API,这可能比使用本机JS对象更好地解决您的问题。


答案 2

在任何 ES5 兼容环境中执行此操作

Object.keys(obj).length

(浏览器支持从这里
此处为 Object.keys 上的文档,包括您可以添加到非 ECMA5 浏览器的方法)