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

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

当前回答

与大多数JavaScript问题一样,有许多解决方案。您可以扩展Object,无论好坏,它都可以像许多其他语言的字典(+一流公民)一样工作。这没什么错,但另一个选择是构造一个满足您特定需求的新对象。

function uberject(obj){
    this._count = 0;
    for(var param in obj){
        this[param] = obj[param];
        this._count++;
    }
}

uberject.prototype.getLength = function(){
    return this._count;
};

var foo = new uberject({bar:123,baz:456});
alert(foo.getLength());

其他回答

如果你知道你不必担心hasOwnProperty检查,你可以这样使用Object.keys()方法:

Object.keys(myArray).length

var myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;var size=JSON.stringify(myObject).length;document.write(大小);

JSON.stringify(myObject)

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

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

只需使用此项即可获得长度:

Object.keys(myObject).length

上述部分的变化如下:

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

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