在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
使用JSON.stringify怎么样?它几乎可以在所有现代浏览器中使用。
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
其他回答
要真正接受ONLY{},在Javascript中使用Lodash的最佳方法是:
_.isEmpty(value) && _.isPlainObject(value)
您可以在使用对象原型之前或代码开始时定义自己的对象原型。
定义应如下所示:
Object.prototype.hasOwnProperties=函数(){ for(此处为var k){ 如果(this.hasOwnProperty(k)){ 返回true;} }return false;}
下面是一个用法示例:
变量a={};while(a.status!==“完成”){ if(状态==“正在处理”){a.status=“完成”;}if(状态==“启动”){a.status=“正在处理”;}如果(!a.hasOwnProperties()){a.status=“正在启动”;}}
享受!:-)
警告当心JSON的限制。
javascript:
obj={ f:function(){} };
alert( "Beware!! obj is NOT empty!\n\nobj = { f:function(){} }" +
"\n\nJSON.stringify( obj )\n\nreturns\n\n" +
JSON.stringify( obj ) );
显示器
Beware!! obj is NOT empty! obj = { f:function(){} } JSON.stringify( obj ) returns {}
我真不敢相信,经过两年的js编程,它从来没有点击过空对象和数组都不是假的,最奇怪的是它从来没有让我发现。
如果默认情况下输入为false,或者输入为空对象或数组,则返回true。逆函数是真正的函数
http://codepen.io/synthet1c/pen/pjmoWL
function falsish( obj ){
if( (typeof obj === 'number' && obj > 0) || obj === true ){
return false;
}
return !!obj
? !Object.keys( obj ).length
: true;
}
function trueish( obj ){
return !falsish( obj );
}
falsish({}) //=> true
falsish({foo:'bar'}) //=> false
falsish([]) //=> true
falsish(['foo']) //=> false
falsish(false) //=> true
falsish(true) //=> false
// the rest are on codepen
我能找到的最佳单线解决方案(已更新):
isEmpty=obj=>!Object.values(obj).filter(e=>类型e!=='undefined').length;console.log(isEmpty({}))//trueconsole.log(isEmpty({a:undefined,b:undefine}))//trueconsole.log(isEmpty({a:undefined,b:void 1024,c:void 0}))//trueconsole.log(isEmpty({a:[undefined,undefined]}))//falseconsole.log(isEmpty({a:1}))//falseconsole.log(isEmpty({a:“”}))//falseconsole.log(isEmpty({a:null,b:undefined}))//false