我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

当前回答

上述部分的变化如下:

var objLength = function(obj){    
    var key,len=0;
    for(key in obj){
        len += Number( obj.hasOwnProperty(key) );
    }
    return len;
};

这是一种更优雅的方式来集成hasOwnProp。

其他回答

更新的答案

以下是截至2016年的最新情况,以及ES5及更高版本的广泛部署。对于IE9+和所有其他支持ES5+的现代浏览器,您可以使用Object.keys(),因此上面的代码变成:

var size = Object.keys(myObj).length;

这不需要修改任何现有的原型,因为Object.keys()现在是内置的。

编辑:对象可以具有无法通过Object.key方法返回的符号财产。因此,如果不提及它们,答案将是不完整的。

将符号类型添加到语言中,以创建对象财产的唯一标识符。符号类型的主要优点是防止覆盖。

Object.keys或Object.getOwnPropertyNames不适用于符号财产。要返回它们,需要使用Object.getOwnPropertySymbols。

var人={[符号('name')]:'John Doe',[符号('age')]:33,“职业”:“程序员”};const propOwn=对象.getOwnPropertyNames(个人);console.log(propOwn.length);//1.let propSymb=对象.getOwnPropertySymbol(人);console.log(propSymb.length);//2.

较旧的答案

最可靠的答案(即,在导致最少错误的情况下,捕捉到您试图做的事情的意图)是:

Object.size=函数(obj){var大小=0,钥匙for(在obj中键入){if(obj.hasOwnProperty(key))大小++;}收益大小;};//获取对象的大小常量myObj={}var size=对象大小(myObj);

JavaScript中有一种约定,即不向Object.prototype中添加内容,因为它可以打破各种库中的枚举。不过,向Object添加方法通常是安全的。


这是最跨浏览器的解决方案。

这比接受的答案更好,因为它使用本机Object.keys(如果存在)。因此,它是所有现代浏览器中速度最快的。

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

Object.keys(obj).length;

我同样需要计算通过websocket接收的对象所使用的带宽。对我来说,只要找到Stringified对象的长度就足够了。

websocket.on('message', data => {
    dataPerSecond += JSON.stringify(data).length;
}

我们可以使用以下公式来计算Object的长度:

const myObject={};console.log(Object.values(myObject).length);

var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length