最简单的方法是在您的页面中包含Lo-Dash或Underscore,它们具有出色的性能并且与新旧浏览器兼容。
然后,您可以使用_.size(object)
或_.keys(object).length
。
对于您的obj.Data
,您可以使用以下代码进行测试:
console.log( _.size(obj.Data) );
或者:
console.log( _.keys(obj.Data).length );
Lo-Dash 和 Underscore 都是出色的库; 无论你使用哪个,都会在你的代码中非常有用。它们非常相似; Lo-Dash 是一个新版本,并具有一些优势。
或者,你可以在你的代码中包含这个函数,它简单地循环遍历对象的属性并对其进行计数:
function ObjectLength( object ) {
var length = 0;
for( var key in object ) {
if( object.hasOwnProperty(key) ) {
++length;
}
}
return length;
};
您可以通过以下方式进行测试:
console.log( ObjectLength(obj.Data) );
那段代码在现代浏览器中的速度并不尽如人意。如果想要一个在现代浏览器中更快且仍然能够在旧版浏览器中运行的版本,您可以使用:
function ObjectLength_Modern( object ) {
return Object.keys(object).length;
}
function ObjectLength_Legacy( object ) {
var length = 0;
for( var key in object ) {
if( object.hasOwnProperty(key) ) {
++length;
}
}
return length;
}
var ObjectLength =
Object.keys ? ObjectLength_Modern : ObjectLength_Legacy;
并且像之前一样,使用以下方式进行测试:
console.log( ObjectLength(obj.Data) );
这段代码在现代浏览器中使用Object.keys(object).length
,对于旧浏览器则会使用循环计数。
但如果你想要更好的效果,我建议使用Lo-Dash或Underscore库,以获得它们提供的所有优点。
我创建了一个jsPerf测试页面,用于比较这些不同方法的速度。请在任何可用的浏览器中运行它以添加到测试中。
感谢Barmar在他的答案中推荐新浏览器使用Object.keys
。