检查对象是否为空的最快方法是什么?
有没有比这更快更好的方法:
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;
}
当前回答
https://lodash.com/docs#isEmpty非常方便:
_.isEmpty({}) // true
_.isEmpty() // true
_.isEmpty(null) // true
_.isEmpty("") // true
其他回答
https://lodash.com/docs#isEmpty非常方便:
_.isEmpty({}) // true
_.isEmpty() // true
_.isEmpty(null) // true
_.isEmpty("") // true
这可能有点俗气。你可以试试这个。
if (JSON.stringify(data).length === 2) {
// Do something
}
不确定这种方法是否有任何缺点。
对于ECMAScript5(不是所有浏览器都支持),你可以使用:
Object.keys(obj).length === 0
假设你有以下对象:
var obj1= {};
var obj2= {test: "test"};
不要忘记我们不能使用===符号来测试对象是否相等,因为他们得到继承,所以如果你使用ECMA 5和更高版本的javascript,答案很简单,你可以使用下面的函数:
function isEmpty(obj) {
//check if it's an Obj first
var isObj = obj !== null
&& typeof obj === 'object'
&& Object.prototype.toString.call(obj) === '[object Object]';
if (isObj) {
for (var o in obj) {
if (obj.hasOwnProperty(o)) {
return false;
break;
}
}
return true;
} else {
console.error("isEmpty function only accept an Object");
}
}
结果如下:
isEmpty(obj1); //this returns true
isEmpty(obj2); //this returns false
isEmpty([]); // log in console: isEmpty function only accept an Object
下划线和lodash都有一个方便的isEmpty()函数,如果你不介意添加一个额外的库的话。
_.isEmpty({});