检查对象是否为空的最快方法是什么?
有没有比这更快更好的方法:
function count_obj(obj){
var i = 0;
for(var key in obj){
++i;
}
return i;
}
检查对象是否为空的最快方法是什么?
有没有比这更快更好的方法:
function count_obj(obj){
var i = 0;
for(var key in obj){
++i;
}
return i;
}
当前回答
下划线和lodash都有一个方便的isEmpty()函数,如果你不介意添加一个额外的库的话。
_.isEmpty({});
其他回答
情况有多糟?
function(obj){
for(var key in obj){
return false; // not empty
}
return true; // empty
}
下划线和lodash都有一个方便的isEmpty()函数,如果你不介意添加一个额外的库的话。
_.isEmpty({});
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isArray(a) {
return Object.prototype.toString.call(a) === '[object Array]'
}
function isObject(a) {
return Object.prototype.toString.call(a) === '[object Object]'
}
function isEmpty(a) {
if (null == a || "" == a)return!0;
if ("number" == typeof a || "string" == typeof a)return!1;
var b = !0;
if (isArray(a)) {
if (!a.length)return!0;
for (var c = 0; c < a.length; c++)isEmpty(a[c]) || (b = !1);
return b
}
if (isObject(a)) {
for (var d in a)hasOwnProperty.call(a, d) && (isEmpty(a[d]) || (b = !1));
return b
}
return!0
}
function isEmpty( o ) {
for ( var p in o ) {
if ( o.hasOwnProperty( p ) ) { return false; }
}
return true;
}
编辑:请注意,您可能应该使用ES5解决方案而不是这个,因为ES5支持现在已经广泛使用。但它仍然适用于jQuery。
简单和跨浏览器的方法是使用jQuery.isEmptyObject:
if ($.isEmptyObject(obj))
{
// do something
}
更多:http://api.jquery.com/jQuery.isEmptyObject/
但是你需要jquery。