Javascript 获取对象的长度

Javascript 获取对象的长度,javascript,Javascript,我的目标如下: var l={"a":1,"b":2,"c":5}; 我想知道这个的长度 alert(l.length); 但它返回未定义的。显然,我希望得到3作为答案 您可以使用来计算对象中的条目数,这将返回对象中的键数组: var l={"a":1,"b":2,"c":5}; Object.keys(l).length; var l = {a: 1, b: 2, c: 3}; Object.keys(l).length; 但是,实现您自己的属性可能更高效(跨浏览器): Object.

我的目标如下:

var l={"a":1,"b":2,"c":5};
我想知道这个的长度

alert(l.length);

但它返回未定义的
。显然,我希望得到
3
作为答案

您可以使用来计算对象中的条目数,这将返回对象中的键数组:

var l={"a":1,"b":2,"c":5};
Object.keys(l).length;
var l = {a: 1, b: 2, c: 3};
Object.keys(l).length;
但是,实现您自己的属性可能更高效(跨浏览器):

Object.length = function(obj) {
    var i = 0;
    for(var key in obj) i++;
    return i;
}

Object.length(l);

请注意,虽然我可以将函数定义为
Object.prototype.length
,允许您编写
l.length()
,但我没有这样做,因为如果您的对象包含键
length
,那么这将失败

这是一个对象,不是数组。我假设这是演示代码,但我可以说使用小写L作为名称是一种容易混淆变量和数字1的方法吗?@Blazemonger:如果你担心混淆符号,你需要更好的字体/语法。不要仅仅因为工具不好就更改代码。@Eric除了经常容易混淆l和1之外,不管字体如何,值得指出的是,使用单字符名称作为变量几乎总是一个坏主意。为了让代码自我注释,没有理由不详细说明变量是什么。同样,您也不应该仅仅因为JavaScript区分大小写就将
myobject
myobject
作为两个不同的变量使用——这很容易导致混淆,而且从来没有必要。@Blazemonger:我不是说
l
是一个好的变量名。你是对的,不是。然而,我无法证明更改为
m
L
是正当的,因为它可能会被混淆。请注意,
Object.keys()
是ES5,所以浏览器支持将是不可靠的。@jmar777。
function count(O){
    for(var p in O){
        if(O.hasOwnProperty(p))++cnt;
    }
    return cnt;
}
count(l);