要做到这一点,最简单的方法是在您的页面中包含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
使用更新的浏览器。